nginx的配置文件仅允许只有一个http
上下文,它位于nginx的主配置文件中/etc/nginx/nginx.conf
。
nginx有一个全局的指令include
允许包含其它配置到主配置文件,这些配置可以是任何有效的nginx配置。也可以是server块及其配置定义。
从而使您可以在一台服务器上运行多个网站。对于每个网站,您可以设置站点文档根目录,包含网站文件的目录,创建单独的安全策略,使用不同的SSL证书等等。
由于官方文档在server的文档将server定义为server block,因此本教程也将翻译server块。
在继续之前,请确保您已满足这些要求。在CentOS 8安装Nginx。您以root或具有sudo权限的用户登录。
在某些文章中,术语server
被称为虚拟主机,虚拟主机是Apache术语。但在Nginx中它被称为虚拟服务器virtual server。
文档根目录是用于存储域名网站文件并响应请求的目录。您可以将文档根目录设置为所需的任何位置。
但Nginx必须有读取权限,对于可执行文件,例如php。nginx必须对其有可执行权限,否则nginx返回500内部服务器的错误。
在此示例中我们将使用目录/var/www/domain1.com/public_html
。作为nginx虚拟主机的的文档根目录。
你可以使用命令sudo mkdir -p /var/www/domain1.com/public_html
创建目录。我们还将在需要文档根目录中创建一个index.html
文件。
echo "hello domain1.com" | sudo tee /var/www/domain1.com/public_html/index.html
命令将会使用tee命令创建index.html
文件。当您在浏览器中访问该域时会显示该文件。
由于上述命令是作为sudo用户执行的,因此新创建的文件和目录归root所有。为了避免权限问题。
请将文档根目录的所有权以及该目录中所有文件的所有权更改为nginx
用户所有。运行chown命令。
除了修改文件权限之外,在CentOS 6之后的系统都安装了Selinux。Selinux全称是安全增強式Linux,是一個Linux核心的安全模組。
因此,你还需要改变index.html
文件的Selinux上下文,如果Selinux上下文不正确Nginx将不能读取文件并返403权限拒绝的错误,403 Forbidden。
sudo mkdir -p /var/www/domain1.com/public_html
echo "hello myfreax.com" | sudo tee /var/www/domain1.com/public_html/index.html
sudo chcon -v --type=httpd_sys_content_t /var/www/domain1.com/public_html/index.html
sudo chown -R nginx: /var/www/domain1.com
创建虚拟主机
在CentOS Linux系统,Nginx默认的虚拟主机配置文件位于/etc/nginx/nginx.conf
目录中。
主配置文件/etc/nginx/nginx.conf
存在包含/etc/nginx/conf.d/.conf
目录的include
指令。
如果你打开nginx的主配置文件,你将可以看到两个include指令,包含目录/etc/nginx/conf.d/.conf
。
因此可以在/etc/nginx/conf.d/
目录中创建以.conf
作为扩展名的nginx虚拟主机配置文件。
本教程将会直接在/etc/nginx/conf.d/
目录创建nginx虚拟主机配置文件。
使用你喜欢的编辑器创建/etc/nginx/conf.d/domain1.com.conf
文件。在本教程我们将使用vim创建文件。
你可以将配置文件命名为任意名称,但是通常最好使用域名,因此我们使用domain1.com.conf
作为配置文件的名称。
sudo vim /etc/nginx/conf.d/domain1.com.conf
复制粘帖以下内容到你的编辑器中:
server {
listen 80;
server_name domain1.com www.domain1.com;
root /var/www/domain1.com/public_html;
index index.html;
access_log /var/log/nginx/domain1.com.access.log;
error_log /var/log/nginx/domain1.com.error.log;
}
server_name
指令用于设置域名。root
指令指定站点文档根目录。access_log
与error_log
指定日志文件的位置。
当创建虚拟主机配置后,使用nginx -t
命令测试Nginx配置的语法是否正确。
如果没有错误nginx将会提示你nginx: configuration file /etc/nginx/nginx.conf test is successful
。
当测试Nginx配置正确之后,我们还需要运行systemctl命令重新启动Nginx服务,以使更改生效。
为了能够正确解释域名domain1.com
。因此我们还需要映射domain1.com
到本地回环地址127.0.0.1
,运行命令echo "127.0.0.1 domain1.com" | sudo tee -a /etc/hosts
。
最后,要验证Nginx虚拟主机是否按预期工作,请在您选择的浏览器中打开http://domain1.com
。
sudo nginx -t
echo "127.0.0.1 domain1.com" | sudo tee -a /etc/hosts
sudo systemctl restart nginx
配置Let's Encrypt SSL证书
结论
我们已向您展示了如何创建Nginx虚拟主机块并在一台CentOS服务器上托管多个域。
您可以重复上述步骤,并为所有域创建其它虚拟主机。如果您遇到任何问题,请随时发表评论。