Rocky Linux 9 Nginx 服务器块配置指南:虚拟主机设置与优化
介绍
在使用Nginx Web服务器时,可以通过配置服务器块(类似于Apache中的虚拟主机)来封装配置细节,从而在单台服务器上托管多个域名。
本指南将详细介绍如何在Rocky Linux 9服务器上配置Nginx的服务器块。
先决条件
在开始本教程之前,您应该使用一个具有sudo权限的非root用户。如果您尚未配置此类用户,可以参考我们的Rocky Linux 9初始服务器设置指南进行创建。
此外,您的服务器上需要安装Nginx。您可以按照《在Rocky Linux 9上安装Nginx的方法》进行安装。
步骤1 – 设置新的文档根目录
为了演示目的,本教程将涵盖如何使用Nginx服务器设置两个域名。本指南中使用的域名是example.com
和test.com
。如果您有自己的域名,可以使用您自己的域名进行配置。
默认情况下,Rocky Linux 9上的Nginx启用了一个服务器块,并配置为从/usr/share/nginx/html
目录提供文档。虽然这对于单个网站运行良好,但如果需要为多个网站提供服务,您需要使用额外的目录。您可以将/usr/share/nginx/html
目录视为默认目录,当客户端请求不匹配其他任何站点时,将提供该目录的内容。
您可以在/usr/share/nginx
目录下为每个站点创建一个目录结构。实际的网页内容将放置在这些站点专属目录中的一个名为“html”的目录中。这样,您可以根据需要为每个站点创建其他相关目录,从而获得更大的灵活性。
为每个站点创建这些目录。-p
标志告诉mkdir
在创建路径时,如果父目录不存在则一并创建。
- sudo mkdir -p /usr/share/nginx/example.com/html
- sudo mkdir -p /usr/share/nginx/test.com/html
现在您已经创建了目录,可以将网页目录的所有权重新分配给您的普通用户账户。这样您就可以在没有sudo权限的情况下对它们进行写操作。
您可以使用$USER
环境变量将当前登录的账户(请确保您没有以root用户登录)分配为所有者。您应该将这些目录的组权限分配给nginx
,这是一个在Rocky Linux上自动创建的用于Nginx的账户,它将允许Web服务器自身在需要时创建新文件以满足您的Web应用需求。chown
命令可以同时完成这两个操作。
- sudo chown -R $USER:nginx /usr/share/nginx/example.com/html
- sudo chown -R $USER:nginx /usr/share/nginx/test.com/html
最后,使用chmod
命令确保您的用户和nginx
组拥有完全(7)的权限,而其他用户仅有只读(5)的权限。要了解更多关于Linux权限的信息,请参考Linux权限基础。
- sudo chmod -R 775 /usr/share/nginx
您的目录结构已配置完毕,可以继续下一步。
步骤2 – 为每个网站创建示例页面
现在您已经设置好了目录结构,为每个站点创建一个默认页面,以便有内容可以展示。
使用nano
或您喜欢的文本编辑器,在您的第一个域名中创建一个index.html
文件。
- nano /usr/share/nginx/example.com/html/index.html
在文件中创建一个简单的网页着陆页面,以指示您当前访问的网站。它将如下所示:
以下是网站example.com
的首页文件路径:/usr/share/nginx/example.com/html/index.html
。
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com server block is working!</h1>
</body>
</html>
编辑完成后保存并关闭文件。如果您正在使用nano
,按下Ctrl+X
,然后在提示时按Y
,最后按Enter
。
由于第二个网站的文件将用于演示目的,您可以按照以下方式将其复制到第二个文档根目录中:
- cp /usr/share/nginx/example.com/html/index.html /usr/share/nginx/test.com/html/
现在,您可以在nano
或您喜欢的文本编辑器中打开新文件。
- nano /usr/share/nginx/test.com/html/index.html
将其修改,使其指向您的第二个域名。
/usr/share/nginx/test.com/html/index.html
的内容如下:
<html>
<head>
<title>Welcome to Test.com!</title>
</head>
<body>
<h1>Success! The test.com server block is working!</h1>
</body>
</html>
完成编辑后,请保存并关闭此文件。现在您已经为两个域名准备好了可供访问者展示的页面。
步骤3 – 为每个域名创建服务器块文件
现在您已经拥有了可供提供的内容,接下来需要创建服务器块,告诉Nginx如何实现内容分发。
默认情况下,Rocky Linux上的Nginx在其主配置文件nginx.conf
中包含一个名为“default”的服务器块。该服务器块位于该文件内部,如下所示:
/etc/nginx/nginx.conf
…
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
…
您可以将此作为您自己配置的模板,并在不同的文件中进行创建。首先设计您第一个域名的服务器块,然后可以复制该块用于您的第二个域名,并进行必要的修改。
创建第一个服务器块文件
在/etc/nginx/conf.d
目录中创建您的第一个服务器块配置文件。默认情况下,主Nginx配置文件包含一行include /etc/nginx/conf.d/*.conf;
,这意味着它将检查与该模式匹配的文件以获取其他服务器块。
使用具有sudo权限的您最喜欢的文本编辑器,为您的第一个域名创建配置文件。
- sudo nano /etc/nginx/conf.d/example.com.conf
从粘贴以下这个简洁的服务器配置块开始:
/etc/nginx/conf.d/example.com.conf
可以在以下路径找到:
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
首先,您应该复查listen
指令。服务器上只能有一个服务器块启用default_server
选项。这个选项指明如果请求的server_name
与可用的服务器块都不匹配时,应由哪个块提供服务。在实际情况中,这种情况不应该经常发生,因为访问者通常会通过您的域名访问您的网站。
您可以选择在listen
指令中包含“default_server”选项,将其中一个站点指定为“默认”站点;或者您可以保留nginx.conf
中“默认”服务器块的启用状态。如果请求的主机无法找到,将会提供/usr/share/nginx/html
目录的内容。
在本指南中,您将保留“默认”的服务器块来为不匹配的请求提供服务,因此您的新的example.com
配置将不包含default_server
。
/etc/nginx/conf.d/example.com.conf
server {
listen 80;
listen [::]:80;
. . .
}
下一个要调整的是文档根目录,由root
指令指定。将其指向您创建的站点文档根目录。
/etc/nginx/conf.d/example.com.conf
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/example.com/html;
}
接下来,您需要修改server_name
来匹配对您的第一个域名的请求。您还可以添加任何需要匹配的别名。在本教程中,您将添加一个example.com
和一个www.example.com
别名来进行演示。
当您完成时,您的文件会变成这样:
/etc/nginx/conf.d/example.com.conf
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
这就是您进行配置所需的全部。保存并关闭文件即可退出。
创建第二个服务器块文件
既然您已经有了初始的服务器块配置,您可以将其用作第二个文件的基础。复制它创建一个新文件。
- sudo cp /etc/nginx/conf.d/example.com.conf /etc/nginx/conf.d/test.com.conf
以sudo权限,在您喜欢的编辑器中打开新文件。
- sudo nano /etc/nginx/conf.d/test.com.conf
同样,请确保您在此文件中不要使用listen
指令的default_server
选项(如果您已经在其他地方使用了该选项)。调整root
指令,使其指向您的第二个域名的文档根目录,并调整server_name
以匹配您的第二个站点的域名(确保包括任何别名)。
当您完成时,您的文件可能会看起来像这样:
/etc/nginx/conf.d/test.com.conf
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/test.com/html;
index index.html index.htm index.nginx-debian.html;
server_name test.com www.test.com;
location / {
try_files $uri $uri/ =404;
}
}
保存并关闭文件。在下一步中,您将重新加载Nginx以反映您所做的更改。
第四步 – 启用服务器块并重新启动Nginx
您现在有三个启用的服务器块,它们根据其监听指令和服务器名称进行配置以进行响应(您可以在此处阅读有关Nginx如何处理这些指令的更多信息)。
example.com
: 将响应对example.com
和www.example.com
的请求。test.com
: 将响应对test.com
和www.test.com
的请求。default
: 将响应端口80上不匹配其他两个块的任何请求。
完成后保存并关闭文件。接下来,测试以确保您的所有Nginx文件中没有语法错误。
- sudo nginx -t
如果没有发现任何问题,请重启Nginx以使您所做的更改生效。
- sudo systemctl restart nginx
现在Nginx应该能够为您的两个域名提供服务。
第五步 — 对本机hosts文件进行测试修改(可选)
如果您尚未使用指向此服务器IP地址的自己拥有的域名,而是使用了占位符值,您可以修改本地计算机的hosts文件,以便临时测试您的Nginx服务器块配置。
这不会允许其他访问者正确地查看您的网站,但它将使您能够独立访问每个网站并测试您的配置。它通过拦截通常会传递到DNS以解析域名的请求来实现。您可以将您的hosts文件设置为自动将某些域名硬编码到特定的远程地址。
注意:
在执行这些步骤时,请确保您操作的是本地计算机,而不是远程服务器。您需要具有root访问权限、是管理组的成员,或者以其他方式能够编辑系统文件来完成这个操作。
如果您正在使用Mac或Linux环境工作,您的hosts文件位于/etc/hosts
。
- sudo nano /etc/hosts
如果您使用的是Windows操作系统,您的hosts文件位于C:\Windows\System32\drivers\etc\hosts
。
您需要知道服务器的公共IP地址和您要路由到服务器的域名。假设您的服务器的公共IP地址是203.0.113.5
,您需要将以下行添加到您的文件中:
/etc/hosts
127.0.0.1 localhost
. . .
203.0.113.5 example.com www.example.com
203.0.113.5 test.com www.test.com
这将截取对example.com
和test.com
的所有请求,并将它们发送到您的服务器上,这是您进行测试时所需要的,尤其是当您并不拥有这些域名的时候。
完成配置后,请保存并关闭文件。
第六步 — 测试您的成果
既然您已经完成了所有准备工作,现在是时候测试您的Nginx服务器块是否正常运行了。您可以通过在浏览器中访问您的域名来检查:
http://example.com
您应该会看到一个类似下图的页面。

如果您访问您的第二个域名,您应该会看到一个略有不同的网站。
http://test.com

如果这两个网站都能正常运行,那么您已成功配置了两个独立的Nginx服务器块。
此时,如果您在本地计算机上为了测试而调整了主机文件,您可能希望删除您添加的那些行。
如果您需要为公共网站访问服务器的域名,您可能需要为每个网站购买一个域名。
结论
现在您应该有能力为您希望从同一台服务器上托管的每个域名创建服务器块。只要您的硬件能够处理流量,您可以创建无数个服务器块,几乎没有真正的限制。
接下来,您可能希望学习如何使用Nginx设置密码认证。