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文件。

我们使用teeecho命令以及管道创建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/.confinclude /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;
}
/etc/nginx/conf.d/domain1.com.conf

server_name指令用于设置域名。root指令设置网站根目录。access_logerror_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
如何在Ubuntu 22.04 Nginx配置Let’s Encrypt SSL证书 | myfreax
Web进行安全通信依赖于HTTPS,这需要使用数字证书,以便浏览器验证Web服务器的身份
如何在Ubuntu 22.04 Nginx配置Let's Encrypt SSL证书
如何使用mkcert创建SSL证书 | myfreax
您是否厌倦了在本地开发项目中使用不受信任的SSL证书?维护自己的证书颁发机构CA是一个痛苦的事情,这过程中需要用到神秘的程序和命令
如何使用mkcert创建SSL证书

结论

您可以重复上述步骤,并为所有域名创建其它虚拟主机。我们已向您展示如何创建Nginx虚拟主机并托管多个域命令。

如果您遇到任何问题,请随时发表评论。