服务器块,在 nginx 中通常称为虚拟主机,允许您在一台服务器上托管多个网站,本文将教大家如何使用它们。
Nginx旨在处理单个服务器和 IP 地址上的多个域,换句话说,如果您有一台用作Web 服务器的服务器,并且它只分配了一个IP 地址,那么为了在服务器上运行多个网站或域,您可以使用 Nginx 虚拟主机。
在开始本教程之前,您需要安装 Nginx。
什么是虚拟主机?
这是一个Apache HTTP Server 术语,然而,Nginx 用户也经常使用它,事实上,Nginx 的正确术语是 server block。
虚拟主机是一种在单个服务器上托管多个域名的方法。
虚拟主机如何工作?
当您在服务器上启动像 Nginx 这样的 Web 服务器软件时,该 Web 服务器将自己绑定到一个或多个网络端口,通常用于端口 80 和 443 的 Web 服务器。
现在,当计算机访问网站时,它将通过 Internet 向服务器发送请求,服务器将接收该请求。服务器要做的第一件事是查看请求发送到目标端口的端口。
接下来,它将使用该目标端口来确定将该信息转发到哪个应用程序,这意味着您的 Web 服务器只能有一个接收请求的应用程序。
但是,如果您想在同一 Web 服务器上托管两个不同的网站怎么办?
服务器需要能够判断数据包何时进入请求网站,它需要能够知道正在请求哪个网站,以便知道要发回哪些信息。
无论请求哪个网站,服务器都不能仅使用端口号和目标端口来确定客户端尝试访问哪个网站,服务器要做的就是说“我要向 Nginx 发送这个请求”,然后 Nginx 必须从那里决定它要发回什么。
Nginx 有一个叫做server blocks的概念,服务器块实际上可以用于两种不同的事情,它们可用于根据请求的 IP 地址为不同的网站提供服务,也可用于根据正在使用的域名为不同的网站提供服务。
因此,当您输入网站名称时www.exam,当服务器收到该名称时,Nginx 实际上可以查看请求的服务器名称的 HTTP 标头内部,然后根据其配置的虚拟主机,决定存储哪个目录网站文件,并根据服务器名称将正确的响应返回给客户端。
如何创建 Nginx 虚拟主机(服务器块)
我们可以在两个目录中创建和存储我们的虚拟主机配置文件,它们都位于/etc/nginx目录中,这两个目录的名称是sites-available和sites-enabled。
- /etc/nginx/sites-available: 定义单个虚拟主机(网站)的目录。请记住,Nginx 不会使用在此目录中找到的配置文件,除非它们链接到该 /etc/nginx/sites-enabled 目录。
- /etc/nginx/sites-enabled:由 Nginx 主动提供服务的虚拟主机(网站)列表。
您可能想知道为什么我们需要两个目录来存储我们的虚拟主机文件?
这样做的主要好处是我们可以在 Nginx 服务器上创建许多虚拟主机文件,但我们可以根据我们的要求启用它们。
现在,我们将创建虚拟主机文件以在 Nginx 服务器中托管具有多个域的多个站点,域名为 web 和 web。
1. 创建目录结构
我们需要做的第一件事是为每个虚拟主机创建一个目录来存储不同的网站内容,我们将这些目录放在其中 /var/www ,并以每个域名命名。
运行以下命令来创建目录:
sudo mkdir -p /var/www/web sudo mkdir -p /var/www/web
Nginx 虚拟主机目录结构
-p 上面命令中的 标志告诉 mkdir 在此过程中创建任何必要的父目录。
2. 为每个网站创建测试页面
接下来,出于演示目的,让我们index.html 在域的文档根目录中创建一个 文件,以便我们可以显示一些内容。
sudo vim /var/www/web/index.html
粘贴以下几行:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Welcome to Website 1!</title> </head> <body> <h1>Welcome to Website 1!</h1> </body> </html>
现在对 web 重复上述步骤。
sudo vim /var/www/web/index.html
粘贴以下几行:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Welcome to Website 2!</title> </head> <body> <h1>Welcome to Website 2!</h1> </body> </html>
3.创建Nginx虚拟主机(Server Block)
要在sites-available目录中创建 Nginx 虚拟主机文件,请执行以下命令:
sudo vim /etc/nginx/sites-available/web
需要注意的是,Nginx 虚拟主机配置文件可以任意命名,但通常情况下,使用域名是一个好习惯。
现在,将以下内容粘贴到您的虚拟主机文件中:
server { listen 80; server_name web www.web; root /var/www/web; access_log /var/log/nginx; error_log /var/log/nginx; }
为了让事情更清楚,让我们分解这个语法。以下是每个参数的含义:
- listen: 指定 Nginx 服务器在哪个端口上侦听连接。
- server_name: 在这里,我们匹配对我们域的请求。该指令包含我们要用于访问我们网站的域名列表。
- root:我们存储网站文件的目录的位置。
- error_log:我们存储此虚拟主机的所有错误日志的日志文件的完整路径。
- access_log:我们存储此虚拟主机的所有访问日志的日志文件的完整路径。
现在我们可以使用我们的初始虚拟主机配置作为我们第二个文件的基础,只需复制它以创建一个新文件:
sudo cp /etc/nginx/sites-available/web /etc/nginx/sites-available/web
打开新文件并调整它以匹配我们的第二个 ( web) 域名:
sudo vim /etc/nginx/sites-available/web server { listen 80; server_name web www.web; root /var/www/web; access_log /var/log/nginx; error_log /var/log/nginx; }
4. 启用 Nginx 虚拟主机(服务器块)
在测试之前我们需要做的最后一件事是启用虚拟主机,我们可以通过创建从文件到sites-enabled 目录的符号链接来做到这一点 :
sudo ln -s /etc/nginx/sites-available/web /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/web /etc/nginx/sites-enabled/
如下图所示,这些文件现在已链接到sites-enabled目录中。
将 Nginx 配置文件链接到启用站点的目录中
在我们继续之前,让我们仔细检查一下是否有任何错别字。测试 Nginx 配置的正确语法:
sudo nginx -t
最后,如果没有发现问题,重启 Nginx 服务以应用更改:
sudo systemctl restart nginx
5. 测试虚拟主机(可选)
为了测试 Nginx 虚拟主机,我们首先需要将我们的域名记录指向服务器的 IP 地址,在我们的例子中,服务器 IP 地址是192.168.122.101.
如果您使用的是Linux,请使用以下命令在您的台式电脑(您将执行测试的电脑)上打开该/etc/hosts文件:
sudo vim /etc/hosts
并如下图一一添加虚拟域名。
完成后保存并关闭文件。以这种方式进行将允许我们测试我们实际上并不拥有的域。
现在打开浏览器www.web和www.web一一输入,您将分别看到两个域的索引页面。
您已经成功地使用 Nginx 配置了两个独立的域。
6. 禁用 Nginx 虚拟主机(服务器块)
要在 Nginx 中禁用虚拟主机,我们只需要删除我们在启用虚拟主机文件时创建的符号链接,例如,要禁用web,我们只需要执行以下命令:
sudo rm -rf /etc/nginx/sites-enabled/web
要应用更改,我们必须重新启动 Nginx 服务器:
sudo systemctl restart nginx
结论
在本文中,向大家介绍了如何在单个 Linux 服务器上创建 Nginx 虚拟主机(服务器块)和托管多个域,要为另一个域创建虚拟主机,只需重复相同的步骤。