myfreax

如何在CentOS 7配置Nginx虚拟主机

server是Nginx指令,用于定义指定域名的配置置,从而使您可以在一台服务器上运行多个网站

5 min read
By myfreax
如何在CentOS 7配置Nginx虚拟主机

nginx的配置文件仅允许只有一个http上下文,它位于nginx的主配置文件中/etc/nginx/nginx.conf

nginx有一个全局的指令include允许包含其它配置到主配置文件,这些配置可以是任何有效的nginx配置。也可以是server块及其配置定义。

从而使您可以在一台服务器上运行多个网站。对于每个网站,您可以设置站点文档根目录,包含网站文件的目录,创建单独的安全策略,使用不同的SSL证书等等。

由于官方文档在server的文档将server定义为server block,因此本教程也将翻译server块。

在继续之前,请确保您已满足这些要求。在CentOS 7安装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;
}
/etc/nginx/conf.d/domain1.com.conf

server_name指令用于设置域名。root指令指定站点文档根目录。access_logerror_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证书

如何在CentOS 7 Nginx配置Let’s Encrypt SSL证书 | myfreax
Web进行安全通信依赖于HTTPS,这需要使用数字证书,以便浏览器验证Web服务器的身份,比如说,google.com是真的吗

结论

我们已向您展示了如何创建Nginx虚拟主机块并在一台CentOS服务器上托管多个域。

您可以重复上述步骤,并为所有域创建其它虚拟主机。如果您遇到任何问题,请随时发表评论。