如何在CentOS7上设置Nginx服务器块

来自菜鸟教程
跳转至:导航、​搜索

介绍

Nginx 是世界上最受欢迎的 Web 服务器之一,负责托管 Internet 上一些最大和流量最高的网站。 在大多数情况下,Nginx 比 Apache 更轻量级和可扩展性更高,可以用作 Web 服务器或反向代理。

Nginx 使用 服务器块 来管理单个站点或域的配置。 服务器块允许一台服务器通过使用匹配系统来托管多个域或接口。 这与希望从单个 VPS 托管多个站点的任何人有关。

配置的每个域都会将访问者引导到保存该站点信息的特定目录,而不会指示同一服务器也负责其他站点。 只要您的服务器可以处理所有站点吸引的流量,此方案就可以扩展,没有任何软件限制。

在本指南中,我们将介绍如何在 CentOS 7 VPS 上设置 Nginx 服务器块。 在此过程中,您将学习如何根据不同的访问者请求的域向不同的访问者提供不同的内容。

先决条件

在开始阅读本指南之前,需要先完成几个步骤。

您需要使用具有 sudo 权限的非 root 用户访问 CentOS 7 服务器。 如果你还没有配置这个,你可以通过运行CentOS 7初始服务器设置指南来创建这个帐户。

您还需要安装 Nginx 才能为其配置服务器块。 如果您想在您的服务器上安装一个完整的 LEMP(Linux、Nginx、MySQL 和 PHP)堆栈,您可以按照我们关于 在 CentOS 7 中设置 LEMP 堆栈的指南进行操作。 如果只需要 Nginx,可以通过 Nginx 的 yum 仓库安装:

首先,将 Nginx 存储库添加到服务器的软件源列表中。

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

现在您可以使用 yum 下载并安装 Nginx。

sudo yum install nginx

完成这些步骤后,通过 SSH 以非 root 用户帐户登录并继续本教程。

注意: 本指南中的示例配置将为 example.com 设置一个服务器块,为 example2.com 设置另一个服务器块。 这些将在整个指南中被引用,但您应该在跟随时替换您自己的域或值。 要了解如何使用 DigitalOcean 设置您的域名,请点击 此链接

如果您没有任何真实的域可玩,我们将在教程结束时向您展示如何使用虚拟值测试您的服务器块配置。

第一步——创建目录结构

首先,我们需要创建一个目录结构来保存站点数据以提供给访问者。

我们的 文档根 (Nginx 查找要服务的内容的顶级目录)将设置为 /var/www 目录中的各个目录。 我们将在这里为我们计划制作的每个服务器块创建一个目录。

在每个目录中,我们将创建一个 html 目录来保存我们的实际文件。 这为我们的托管提供了一些灵活性。

我们可以使用 mkdir 命令创建这些目录(带有 -p 标志,允许我们创建一个包含嵌套文件夹的文件夹):

sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/example2.com/html

请记住,red 中的部分代表我们想要从我们的 VPS 服务的域名。

授予权限

我们现在有了文件的目录结构,但它们归我们的 root 用户所有。 如果我们希望我们的普通用户能够修改我们 web 目录中的文件,我们可以使用 chown 更改所有权:

sudo chown -R $USER:$USER /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example2.com/html

$USER 变量将采用您当前登录的用户的值,就像您提交命令时一样。 通过这样做,我们的普通用户现在拥有 public_html 子目录,我们将在其中存储我们的内容。

我们还应该稍微修改一下我们的权限,以确保允许对一般 Web 目录以及其中的所有文件和文件夹进行读取访问,以便可以正确提供页面:

sudo chmod -R 755 /var/www

您的 Web 服务器现在应该具有提供内容所需的权限,并且您的用户应该能够在适当的文件夹中创建内容。

第二步——为每个站点创建演示页面

现在我们已经有了目录结构,让我们创建一些内容来提供服务。

因为这只是为了演示和测试,所以我们的页面会很简单。 我们将只为标识该特定域的每个站点创建一个 index.html 页面。

让我们从 example.com 开始。 我们可以在编辑器中打开一个 index.html 文件,输入:

nano /var/www/example.com/html/index.html

在此文件中,创建一个简单的 HTML 文档,指示该页面连接到的站点。 对于本指南,我们的第一个域的文件将如下所示:

<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h1>Success! The example.com server block is working!</h1>
  </body>
</html>

完成后保存并关闭文件。

我们可以通过键入以下内容复制此文件以用作我们第二个站点的 index.html 的模板:

cp /var/www/example.com/html/index.html /var/www/example2.com/html/index.html

现在让我们打开该文件并修改相关信息:

nano /var/www/example2.com/html/index.html
<html>
  <head>
    <title>Welcome to Example2.com!</title>
  </head>
  <body>
    <h1>Success! The example2.com server block is working!</h1>
  </body>
</html>

保存并关闭此文件。 您现在拥有测试服务器块配置所需的页面。

第三步——创建新的服务器块文件

服务器块文件指定了我们单独站点的配置,并规定了 Nginx Web 服务器将如何响应各种域请求。

首先,我们需要设置存储服务器块的目录,以及告诉 Nginx 服务器块已准备好为访问者提供服务的目录。 sites-available 目录将保存我们所有的服务器块文件,而 sites-enabled 目录将保存指向我们要发布的服务器块的符号链接。 我们可以通过键入以下内容来创建两个目录:

sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled

注意: 这个目录布局是由 Debian 贡献者引入的,但我们将其包含在此处是为了增加管理服务器块的灵活性(因为通过这种方式临时启用和禁用服务器块更容易)。

接下来,我们应该告诉 Nginx 在 sites-enabled 目录中查找服务器块。 为此,我们将编辑 Nginx 的主配置文件并添加一行声明附加配置文件的可选目录:

sudo nano /etc/nginx/nginx.conf

将这些行添加到 http {} 块的末尾:

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

第一行指示 Nginx 在 sites-enabled 目录中查找服务器块,而第二行增加分配给解析域名的内存量(因为我们现在使用多个域)。

完成这些更改后,您可以保存并关闭文件。 我们现在准备创建我们的第一个服务器块文件。

创建第一个服务器块文件

默认情况下,Nginx 包含一个名为 default.conf 的服务器块,我们可以将其用作我们自己的配置的模板。 我们可以通过复制默认文件来创建我们的第一个服务器块配置文件:

sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/sites-available/example.com.conf

现在,使用 root 权限在文本编辑器中打开新文件:

sudo nano /etc/nginx/sites-available/example.com.conf

注意:由于我们已经列出的配置,所有服务器块文件必须.conf结尾。

忽略注释行,文件将如下所示:

server {
    listen  80;
    server_name localhost;

    location / {
        root  /usr/share/nginx/html;
        index  index.html index.htm;
    }
    
    error_page  500 502 503 504  /50x.html;
    location = /50x.html {
        root  /usr/share/nginx/html;
    }
}

我们首先要调整的是 server_name,它告诉 Nginx 哪些请求指向这个服务器块。 我们将声明主服务器名称 example.com 以及 www.example.com 的附加别名,以便 www. 和非 www. 请求都是提供相同的内容:

server_name example.com www.example.com;

注意: 每个 Nginx 语句都必须以分号结尾(;),所以如果以后遇到问题,请检查每个语句行。

接下来,我们要修改由 root 指令指定的文档根目录。 将其指向您创建的站点的文档根目录:

root /var/www/example.com/html;

如果找不到所需的文件名或目录,我们还想添加一个以 404 错误结尾的 try_files 命令:

try_files $uri $uri/ =404;

完成后,您的文件将如下所示:

server {
    listen  80;
    
    server_name example.com www.example.com;
    
    location / {
        root  /var/www/example.com/html;
        index  index.html index.htm;
        try_files $uri $uri/ =404;
    }

    error_page  500 502 503 504  /50x.html;
    location = /50x.html {
        root  /usr/share/nginx/html;
    }
}

这就是我们基本配置所需的全部内容,因此保存并关闭文件以退出。

创建第二个服务器块文件

现在我们已经建立了第一个服务器块文件,我们可以通过复制该文件并根据需要对其进行调整来创建第二个。

首先用 cp 复制它:

sudo cp /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-available/example2.com.conf

在文本编辑器中以 root 权限打开新文件:

sudo nano /etc/nginx/sites-available/example2.com.conf

您现在需要修改所有信息以引用您的第二个域。 完成后,您的第二个服务器块文件可能如下所示:

server {
    listen  80;
    
    server_name example2.com www.example2.com;
    
    location / {
        root  /var/www/example2.com/html;
        index  index.html index.htm;
        try_files $uri $uri/ =404;
    }

    error_page  500 502 503 504  /50x.html;
    location = /50x.html {
        root  /usr/share/nginx/html;
    }
}

完成这些更改后,您可以保存并关闭文件。

第四步——启用新的服务器块文件

现在我们已经创建了服务器块文件,我们需要启用它们,以便 Nginx 知道将它们提供给访问者。 为此,我们可以为 sites-enabled 目录中的每个服务器块创建一个符号链接:

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf
sudo ln -s /etc/nginx/sites-available/example2.com.conf /etc/nginx/sites-enabled/example2.com.conf

完成后,重新启动 Nginx 以使这些更改生效:

sudo systemctl restart nginx

第五步——设置本地主机文件(可选)

如果您一直使用示例域而不是实际域来测试此过程,您仍然可以通过临时修改本地计算机上的 hosts 文件来测试服务器块的功能。 这将拦截对您配置的域的任何请求,并将它们指向您的 VPS 服务器,就像 DNS 系统在您使用注册域时所做的那样。 但是,这仅适用于您的本地计算机,并且仅用于测试目的。

注意: 确保您在本地计算机上操作这些步骤,而不是您的 VPS 服务器。 您将需要访问该计算机的管理凭据。

如果您使用的是 Mac 或 Linux 计算机,请使用管理员权限编辑本地 hosts 文件,方法是键入:

sudo nano /etc/hosts

如果您使用的是 Windows 机器,您可以在此处 找到更改主机文件 的说明。

您需要添加的详细信息是您的 VPS 的公共 IP 地址,后跟您要用于访问该 VPS 的域:

127.0.0.1   localhost
127.0.1.1   guest-desktop
server_ip_address example.com
server_ip_address example2.com

这将在我们的本地计算机上定向任何对 example.comexample2.com 的请求,并将它们发送到位于 server_ip_address 的服务器。

第六步——测试你的结果

现在您已经配置了服务器块,您可以通过转到您在 Web 浏览器中配置的域来轻松测试您的设置:

http://example.com

您应该会看到如下所示的页面:

同样,如果您访问其他域,您将看到为它们创建的文件。

如果您配置的所有站点都运行良好,那么您已经成功地在同一 CentOS 服务器上配置了新的 Nginx 服务器块。

如果您调整了家用计算机的 hosts 文件,您可能希望删除添加的行,因为您已经验证了您的配置有效。 这将防止您的主机文件被实际不需要的条目填充。

结论

此时,您现在应该有一个 CentOS 7 服务器来处理具有不同域的多个站点。 您可以按照我们上面概述的步骤扩展此过程,以便稍后制作其他服务器块。 Nginx 可以处理的域名数量没有软件限制,因此请随意制作尽可能多的服务器能够处理的域名。