nginx的配置文件仅允许只有一个http上下文,它位于nginx的主配置文件/etc/nginx/nginx.conf。
nginx有一个全局的指令include允许包含其它配置到主配置文件,这些配置可以是任何有效的nginx配置。也可以是server块及其配置定义。
从而使您可以在一台服务器上运行多个网站。对于每个网站,您可以设置站点文档根目录,包含网站文件的目录,创建单独的安全策略,使用不同的SSL证书等等。
由于官方文档在server的文档将server定义为server block,因此本教程也将翻译server块。
在继续之前,请确保您已满足这些要求。在Ubuntu 20.04安装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文件。
我们使用tee,echo命令以及管道创建index.html文件。当您在浏览器中访问该域名时会显示此文件。
由于上述命令是以root用户运行,因此创建的文件和目录归root用户所有。为了避免权限问题。
请将站点根目录的所有权以及所有文件的所有权改为www-data用户所有。运行chown命令。
mkdir -p /var/www/domain1.com/public_html
echo "hello myfreax.com" | sudo tee /var/www/domain1.com/public_html/index.html
sudo chown -R www-data: /var/www/domain1.com
在Ubuntu Linux系统,Nginx默认的虚拟主机配置文件位于/etc/nginx/sites-available目录中。
如果你打开nginx的主配置文件,你将看到两个include指令,分别是include /etc/nginx/conf.d/.conf,include /etc/nginx/sites-enabled/。
因此你可以直接在/etc/nginx/sites-enabled目录中创建配置文件,还可以在/etc/nginx/conf.d/目录中创建以.conf作为扩展名的配置文件。
本教程将会直接在/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虚拟主机配置后,你应该在每次修改Nginx配置文件运行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