如何在 CentOS 7 上设置 Nginx 服务器块

介绍

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

Nginx 使用 服务器块来管理单个网站或域的配置. 服务器块允许一个服务器通过使用匹配系统来托管多个域或接口。

每个配置的域将引导访问者到一个特定的目录,其中包含该网站的信息,而不会表明相同的服务器也对其他网站负责。

在本指南中,我们将通过如何在 CentOS 7 VPS 上设置 Nginx 服务器块。

前提条件

在您开始使用本指南之前,有几个步骤必须先完成。

您将需要访问一个 CentOS 7 服务器,具有sudo权限的非根用户. 如果您尚未配置此功能,您可以通过 CentOS 7 初始服务器设置指南创建此帐户。

如果你想在你的服务器上安装一个完整的LEMP(Linux, Nginx,MySQL和PHP)堆栈,你可以按照我们的指南在CentOS 7中设置LEMP堆栈(https://andsky.com/tech/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-centos-7)。

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

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

现在你可以使用yum来下载和安装 Nginx。

1sudo yum install nginx

完成这些步骤后,通过 SSH 登录作为您的非根用户帐户,并继续使用教程。

**注:**本指南中的示例配置将为example.comexample2.com创建一个服务器块,这些将被引用在整个指南中,但您应该在跟随时替换自己的域名或值。

如果您没有任何真正的域名可玩,我们将向您展示如何测试您的服务器块配置以使用愚蠢的值,接近教程的结束。

步骤一:创建目录结构

首先,我们需要创建一个目录结构,该目录将保留网站数据,以便为访问者提供服务。

我们的 ** 文档根**( Nginx 寻找内容的顶级目录)将被设置为 /var/www 目录中的个别目录,我们将为我们计划创建的每个服务器块在这里创建一个目录。

在每个目录中,我们将创建一个html目录,该目录将包含我们的实际文件,这为我们的托管提供了一定的灵活性。

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

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

请记住,红色部分代表我们希望从我们的VPS服务的域名。

授予许可

我们现在有我们的文件的目录结构,但它们属于我们的用户. 如果我们希望我们的普通用户能够修改我们的网页目录中的文件,我们可以用chown更改所有权:

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

$USER变量将取代您当前登录的用户的值,就像您提交命令时一样. 这样做,我们的常规用户现在拥有我们将存储内容的public_html子目录。

我们还应该稍微修改我们的权限,以确保阅读访问被允许到一般的网页目录,以及内部的所有文件和文件夹,以便可以正确地服务页面:

1sudo chmod -R 755 /var/www

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

步骤二:为每个网站创建演示页

现在我们有我们的目录结构,让我们创建一些内容来服务。

因为这只是用于演示和测试,我们的页面将非常简单,我们只会为每个网站创建一个index.html页面,识别该特定域。

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

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

在此文件中,创建一个简单的HTML文档,指示该页面链接到的网站. 对于本指南,我们的第一个域的文件将看起来像这样:

1<html>
2  <head>
3    <title>Welcome to Example.com!</title>
4  </head>
5  <body>
6    <h1>Success! The example.com server block is working!</h1>
7  </body>
8</html>

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

我们可以复制此文件作为我们第二个网站的index.html的模板,输入:

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

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

1nano /var/www/example2.com/html/index.html
1<html>
2  <head>
3    <title>Welcome to Example2.com!</title>
4  </head>
5  <body>
6    <h1>Success! The example2.com server block is working!</h1>
7  </body>
8</html>

保存和关闭此文件,您现在有测试服务器封锁配置所需的页面。

步骤三:创建新的服务器封锁文件

服务器封锁文件是指我们的单独网站的配置,并决定 Nginx 网页服务器如何响应各种域请求。

首先,我们需要设置我们的服务器块将被存储的目录,以及告诉 Nginx 服务器块已经准备好为访问者服务的目录。网站可用目录将保留我们所有的服务器块文件,而网站可用目录将保留我们想要发布的服务器块的象征链接。

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

** 注意:** 此目录布局是由 Debian 贡献者引入的,但我们正在为管理服务器块提供额外的灵活性(因为通过这种方式暂时启用和禁用服务器块更容易)。

接下来,我们应该告诉 Nginx 在网站启用目录中搜索服务器块. 为了做到这一点,我们将编辑 Nginx 的主要配置文件,并添加一行声明额外配置文件的可选目录:

1sudo nano /etc/nginx/nginx.conf

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

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

第一行指示 Nginx 在网站启用目录中搜索服务器块,而第二行增加了用于分析域名的内存量(因为我们现在正在使用多个域)。

当你完成这些更改时,你可以保存和关闭文件. 我们现在准备创建我们的第一个服务器封锁文件。

创建第一个服务器块文件

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

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

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

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

**注:由于我们所描述的配置,所有服务器封锁文件 must 都以 .conf 结束。

忽略了评论的行,文件将看起来像这样:

 1server {
 2    listen 80;
 3    server_name localhost;
 4
 5    location / {
 6        root  /usr/share/nginx/html;
 7        index index.html index.htm;
 8    }
 9
10    error_page 500 502 503 504  /50x.html;
11    location = /50x.html {
12        root  /usr/share/nginx/html;
13    }
14}

我们将宣布主服务器名称,example.com,以及对www.example.com的附加名称,以便在www.和非www.www.请求中提供相同的内容:

1server_name example.com www.example.com;

** 注意:** 每个 Nginx 语句必须以半列(;)结束,因此如果您在以后遇到问题,请检查您的语句的每个行。

接下来,我们要修改由root指令规定的文档根,指向您创建的网站的文档根:

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

我们还想添加一个试用_files命令,如果未找到所需的文件名或目录,它会以404错误结束:

1try_files $uri $uri/ =404;

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

 1server {
 2    listen 80;
 3
 4    server_name example.com www.example.com;
 5
 6    location / {
 7        root  /var/www/example.com/html;
 8        index index.html index.htm;
 9        try_files $uri $uri/ =404;
10    }
11
12    error_page 500 502 503 504  /50x.html;
13    location = /50x.html {
14        root  /usr/share/nginx/html;
15    }
16}

这就是我们需要的基本配置,所以保存和关闭文件以退出。

创建第二个服务器块文件

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

开始用cp复制它:

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

在文本编辑器中打开新的 root 特权文件:

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

您现在需要修改所有信息,以参考您的第二个域. 当您完成时,您的第二个服务器封锁文件可能看起来像这样:

 1server {
 2    listen 80;
 3
 4    server_name example2.com www.example2.com;
 5
 6    location / {
 7        root  /var/www/example2.com/html;
 8        index index.html index.htm;
 9        try_files $uri $uri/ =404;
10    }
11
12    error_page 500 502 503 504  /50x.html;
13    location = /50x.html {
14        root  /usr/share/nginx/html;
15    }
16}

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

步骤四:启用新服务器封锁文件

现在我们已经创建了我们的服务器封锁文件,我们需要启用它们,以便 Nginx 知道如何为访问者提供服务。

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

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

1sudo systemctl restart nginx

步骤五:设置本地主机文件(可选)

如果您一直在使用示例域代替实际域来测试此过程,您仍然可以通过在本地计算机上暂时修改主机文件来测试服务器块的功能,这将拦截您配置的域的任何请求,并将其指向您的VPS服务器,就像DNS系统如果您使用注册的域一样。

** 注意:** 请确保您在本地计算机上运行这些步骤,而不是 VPS 服务器。

如果您在 Mac 或 Linux 计算机上,请通过键入编辑您的本地主机文件以获得管理权限:

1sudo nano /etc/hosts

如果您在 Windows 计算机上,您可以找到关于更改您的主机文件的说明 这里

您需要添加的详细信息是您的VPS的公共IP地址,然后是您想要使用的域名来访问该VPS:

1127.0.0.1 localhost
2127.0.1.1 guest-desktop
3server_ip_address example.com
4server_ip_address example2.com

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

步骤六:测试你的结果

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

1http://example.com

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

Success! The example.com server block is working!

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

如果您配置的所有站点都正常工作,那么您已经在相同的 CentOS 服务器上成功配置了新的 Nginx 服务器块。

如果您调整了家用计算机的主机文件,您可能想要删除您现在已经验证了配置是否有效的添加的行,这将防止您的主机文件填充不必要的条目。

结论

在这一点上,你现在应该有一个单一的 CentOS 7 服务器处理多个网站,具有单独的域名。你可以通过遵循我们上面描述的步骤来扩展这个过程,以便稍后创建额外的服务器块。

Published At
Categories with 技术
Tagged with
comments powered by Disqus