nginx的配置文件仅允许只有一个http
上下文,它位于nginx的主配置文件/etc/nginx/nginx.conf
。
nginx有一个全局的指令include
允许包含其它配置到主配置文件,这些配置可以是任何有效的nginx配置。也可以是server块及其配置定义。
从而使您可以在一台服务器上运行多个网站。对于每个网站,您可以设置站点文档根目录,包含网站文件的目录,创建单独的安全策略,使用不同的SSL证书等等。
由于官方文档在server的文档将server定义为server block,因此本教程也将翻译server块。
在继续之前,请确保您已满足这些要求。在Ubuntu 22.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_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
结论
您可以重复上述步骤,并为所有域名创建其它虚拟主机。我们已向您展示如何创建Nginx虚拟主机并托管多个域命令。
如果您遇到任何问题,请随时发表评论。