如何在 Rocky Linux 9 上设置 Nginx 服务器块(虚拟主机

介绍

在使用 Nginx 网页服务器时, 服务器块(类似于 Apache 中的虚拟主机)可以用来封装配置细节,并在单个服务器上托管多个域。

在本指南中,您将学习如何在Rocky Linux 9服务器上配置 Nginx中的服务器块。

前提条件

如果你没有这样的用户配置,你可以通过遵循我们的 Rocky Linux 9初始服务器设置指南来创建一个。

您还需要在您的服务器上安装 Nginx. 您可以安装它如下 如何在Rocky Linux 9上安装 Nginx:

步骤 1 – 设置新的文档根目录

为了演示目的,本教程将涵盖使用 Nginx 服务器设置两个域名.本指南中使用的域名是 example.comtest.com. 如果您已经拥有自己的域名,您可以使用它们。

<$>[注] 注: 有关在 DigitalOcean 注册新域的更多信息,请参阅我们的 域和 DNS 产品文档

如果您没有两个域名可配置,您现在可以使用位置持有人名称,您仍然可以测试您的配置。

默认情况下,Rocky Linux 9上的Nginx有一个服务器块启用。它配置为在/usr/share/nginx/html的目录中服务文档。虽然这对单个网站很好,但你需要额外的目录来服务多个网站。你可以把/usr/share/nginx/html目录视为默认目录,如果客户端请求不匹配你的其他任何网站。

您可以为您的每个网站创建一个/usr/share/nginx中的目录结构,实际的网页内容将在这些特定网站目录中的html目录中放置,这为您提供了一些额外的灵活性,根据需要创建与您的网站相关的其他目录。

创建这些目录为您的每个网站. -p 标志说mkdir在途中创建任何必要的母目录:

1sudo mkdir -p /usr/share/nginx/example.com/html
2sudo mkdir -p /usr/share/nginx/test.com/html

现在你有你的目录,你可以重新分配所有权的网页目录到你的正常的用户帐户,这将允许你写给他们没有sudo的权限。

您可以使用$USER环境变量将所有权分配给您当前登录的帐户(请确保您没有登录为 root)。您应该将这些目录的群组权限分配给nginx,这是在 Rocky Linux 上自动为 Nginx 创建的帐户,这将允许Web服务器本身在您的Web应用程序需要时创建新文件。

1sudo chown -R $USER:nginx /usr/share/nginx/example.com/html
2sudo chown -R $USER:nginx /usr/share/nginx/test.com/html

最后,使用chmod命令确保您的用户和nginx组都有完整的(7)权限,而其他用户只有阅读的(5)权限。

1sudo chmod -R 775 /usr/share/nginx

您的目录结构现在已配置,您可以继续。

步骤 2:为每个网站创建样本页面

现在你已经设置了目录结构,为每个网站创建一个默认页面,这样你就可以显示一些东西。

使用nano或您最喜欢的文本编辑器,在您的第一个域中创建一个index.html文件:

1nano /usr/share/nginx/example.com/html/index.html

在文件中,创建一个 barebones 网页定位页,显示您目前正在访问的网站。

1[label /usr/share/nginx/example.com/html/index.html]
2<html>
3    <head>
4        <title>Welcome to Example.com!</title>
5    </head>
6    <body>
7        <h1>Success! The example.com server block is working!</h1>
8    </body>
9</html>

完成后保存并关闭文件. 如果您正在使用nano,请按Ctrl+X,然后在提示时按Y,然后按Enter

由于您的第二个网站的文件将是相同的示范目的,您可以将其复制到您的第二个文档根如下:

1cp /usr/share/nginx/example.com/html/index.html /usr/share/nginx/test.com/html/

现在,您可以在nano或您最喜欢的文本编辑器中打开新文件:

1nano /usr/share/nginx/test.com/html/index.html

修改它,以便它指向您的第二个域:

1[label /usr/share/nginx/test.com/html/index.html]
2<html>
3    <head>
4        <title>Welcome to Test.com!</title>
5    </head>
6    <body>
7        <h1>Success!  The test.com server block is working!</h1>
8    </body>
9</html>

当你完成时,保存并关闭此文件. 你现在有几个页面向你两个域的访问者显示。

步骤 3:为每个域创建服务器块文件

现在你有内容来服务,你需要创建服务器块,它会告诉 Nginx 如何做到这一点。

默认情况下,Rocky Linux 上的 Nginx 包含一个默认服务器块在其主要配置文件中,nginx.conf

 1[label /etc/nginx/nginx.conf]
 2 3   server {
 4        listen 80 default_server;
 5        listen       [::]:80 default_server;
 6        server_name _;
 7        root         /usr/share/nginx/html;
 8
 9        # Load configuration files for the default server block.
10        include /etc/nginx/default.d/*.conf;
11
12        location / {
13        }
14
15        error_page 404 /404.html;
16            location = /40x.html {
17        }
18
19        error_page 500 502 503 504 /50x.html;
20            location = /50x.html {
21        }
22    }
23

您可以使用它作为您自己的配置的模板,您可以将其创建成单独的文件,开始设计您的第一个域的服务器块,然后将其复制到您的第二个域,并进行任何必要的更改。

创建第一个服务器块文件

创建您的第一个服务器区块配置文件在 /etc/nginx/conf.d 目录中. 主要的 Nginx 配置文件包含线 include /etc/nginx/conf.d/*.conf; 默认情况下,这意味着它将检查匹配该模式的文件,以查找额外的服务器块。

使用您喜爱的文本编辑器具有sudo权限,为您的第一个域创建配置文件:

1sudo nano /etc/nginx/conf.d/example.com.conf

开始通过粘贴到这个barebones服务器块:

 1[label /etc/nginx/conf.d/example.com.conf]
 2server {
 3        listen 80;
 4        listen [::]:80;
 5
 6        root /usr/share/nginx/html;
 7        index index.html index.htm index.nginx-debian.html;
 8
 9        server_name _;
10
11        location / {
12                try_files $uri $uri/ =404;
13        }
14}

首先,您应该查看倾听指令。服务器上的服务器块中只有一个可以启用default_server选项. 这指定了如果所请求的server_name不匹配任何可用的服务器块,哪个区块应该提供请求。

您可以选择将您的网站之一指定为默认通过在倾听指令中包含默认_服务器选项,或者您可以在nginx.conf中留下默认服务器封锁,如果无法找到所请求的主机,它将为/usr/share/nginx/html目录的内容提供服务。

在本指南中,您将留下默认服务器块,以服务不匹配的请求,因此您的新的example.com配置不会包含default_server:

1[label /etc/nginx/conf.d/example.com.conf]
2server {
3        listen 80;
4        listen [::]:80;
5
6        . . .
7}

接下来要调整的是根指令所指定的文档根,指向您创建的网站的文档根:

1[label /etc/nginx/conf.d/example.com.conf]
2server {
3        listen 80;
4        listen [::]:80;
5
6        root /usr/share/nginx/example.com/html;
7
8}

接下来,您需要修改server_name,以匹配您的第一个域的请求. 您还可以添加任何您需要匹配的名称。 在本教程中,您将添加一个example.com和一个www.example.com名称来演示。

当你完成时,你的文件将看起来像这样:

 1[label /etc/nginx/conf.d/example.com.conf]
 2server {
 3        listen 80;
 4        listen [::]:80;
 5
 6        root /usr/share/nginx/example.com/html;
 7        index index.html index.htm index.nginx-debian.html;
 8
 9        server_name example.com www.example.com;
10
11        location / {
12                try_files $uri $uri/ =404;
13        }
14}

这就是配置所需的全部。保存并关闭文件以退出。

创建第二个服务器块文件

现在你已经有了初始的服务器封锁配置,你可以使用它作为你的第二个文件的基础。

1sudo cp /etc/nginx/conf.d/example.com.conf /etc/nginx/conf.d/test.com.conf

在您喜爱的编辑器中打开sudo特权的新文件:

1sudo nano /etc/nginx/conf.d/test.com.conf

再次,请确保您没有在此文件中使用指令的默认_服务器选项,如果您已经在其他地方使用了该指令。

当你完成时,你的文件可能会看起来像这样:

 1[label /etc/nginx/conf.d/test.com.conf]
 2server {
 3        listen 80;
 4        listen [::]:80;
 5
 6        root /usr/share/nginx/test.com/html;
 7        index index.html index.htm index.nginx-debian.html;
 8
 9        server_name test.com www.test.com;
10
11        location / {
12                try_files $uri $uri/ =404;
13        }
14}

在下一步,您将重新加载 Nginx 以反映您的更改。

步骤 4 – 启用服务器封锁并重新启动 Nginx

您现在有三个服务器块启用,这些服务器基于其倾听指令和服务器名称来响应(您可以阅读有关 Nginx 如何处理这些指令的更多信息:

  • example.com: 将响应对 example.comwww.example.com 的请求* test.com: 将响应对 test.comwww.test.com 的请求* 默认: 将响应在端口 80 上不匹配其他两个块的任何请求

保存并关闭文件完成后 接下来,测试以确保您的任何 Nginx 文件中没有语法错误:

1sudo nginx -t

如果没有发现任何问题,请重新启动 Nginx 以启用您的更改:

1sudo systemctl restart nginx

Nginx现在应该为您的两个域名提供服务。

步骤 5 — 修改本地主机文件进行测试(可选)

如果您没有使用您所拥有的域名,这些域名实际上指向该服务器的 IP 地址,而是使用了位数值,您可以修改本地计算机的 _hosts 文件,以允许您暂时测试您的 Nginx 服务器块配置。

这不会允许其他访问者正确查看您的网站,但它会让你能够独立访问每个网站并测试您的配置。这通过拦截通常会去DNS解决域名的请求来工作。

<$>[注] 注: 确保您在这些步骤中在本地计算机上运行,而不是远程服务器。

如果您在 Mac 或 Linux 环境中工作,则您的主机文件位于 /etc/hosts:

1sudo nano /etc/hosts

如果您在 Windows 上,您的主機檔案位於「C:\Windows\System32\drivers\etc\hosts」。

你需要知道你的服务器的公共IP地址和你想要路由到服务器的域名,假设你的服务器的公共IP地址是203.0.113.5,你添加到你的文件的行将看起来像这样:

1[label /etc/hosts]
2127.0.0.1 localhost
3. . .
4
5203.0.113.5 example.com www.example.com
6203.0.113.5 test.com www.test.com

这将拦截任何对example.comtest.com的请求,并将其发送到您的服务器,如果您实际上不拥有您正在测试的域名,则您将需要。

保存并关闭文件,当你完成。

步骤6:测试你的结果

现在你已经设置了,你应该测试你的服务器块是否正常工作. 你可以通过访问你的网页浏览器的域名来做到这一点:

1http://example.com

你应该看到一个看起来像这样的页面:

Nginx first server block

如果你访问你的第二个域名,你应该看到一个略有不同的网站:

1http://test.com

Nginx second server block

如果这两个网站都起作用,那么您已经成功配置了两个独立的服务器块,使用 Nginx。

在此时刻,如果您在本地计算机上调整了主机文件以进行测试,您可能会想要删除所添加的行。

如果您需要域名访问您的服务器为面向公众的网站,您可能想要购买每个网站的域名。

结论

您现在应该能够为您希望从同一个服务器中托管的每个域创建服务器块,只要您的硬件能够处理流量,您可以创建的服务器块数量就没有真正的限制。

接下来,您可能想学习 如何使用 Nginx 设置密码身份验证

Published At
Categories with 技术
comments powered by Disqus