介绍
Nginx是世界上最流行的Web服务器之一,负责托管一些在互联网上最大和最高流量的网站。 在大多数情况下,Nginx比Apache更轻和更可扩展,并且可以用作Web服务器或反向代理。
Nginx的使用服务器模块来管理单个网站或域配置。 服务器块允许一个服务器通过使用匹配系统托管多个域或接口。 这是任何人寻找托管一个VPS以上的多个网站相关。
配置的每个域都会将访问者定向到包含该站点信息的特定目录,而不会指示同一服务器也负责其他站点。 此方案是可扩展的,没有任何软件限制,只要您的服务器可以处理所有网站吸引的流量。
在本指南中,我们将介绍如何在CentOS 7 VPS上设置Nginx服务器块。 在此过程中,您将了解如何根据所请求的域名向不同的访问者投放不同的内容。
先决条件
在开始使用本指南之前,需要先完成几个步骤。
您将需要访问一个CentOS 7服务器,有一个非root用户sudo
权限。 如果你还没有这个配置是,您可以通过运行CentOS 7初始服务器设置向导来创建此帐户。
您还需要安装Nginx才能为其配置服务器块。 如果你想要一个完整的LEMP(Linux的,Nginx的,MySQL和PHP)的服务器上,你可以按照我们的指南建立LEMP堆在CentOS 7 ,如果你只需要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
请记住,在红色部分代表,我们希望从我们的VPS服务域名。
授予权限
我们现在有我们的文件目录结构,但它们是由我们所拥有root
用户。 如果我们希望我们普通用户能在我们的网页目录修改文件,我们可以改变与所有权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
您的网络服务器现在应具有提供内容所需的权限,您的用户应该能够在相应的文件夹中创建内容。
第二步 - 为每个网站创建演示页面
现在我们有了目录结构,让我们创建一些内容来服务。
因为这只是为了演示和测试,我们的网页将很简单。 我们只是要做出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;
我们还需要添加一个try_files
命令,如果所需的文件名或目录未发现有404错误结束:
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.com
和example2.com
我们的本地计算机上,并将其传送给我们,服务器server_ip_address
。
第六步 - 测试你的结果
现在您已配置了服务器块,您可以通过转到您在Web浏览器中配置的域来轻松地测试您的设置:
http://example.com
您应该看到如下所示的页面:
同样,如果您访问其他域,您将看到为其创建的文件。
如果您配置的所有站点都工作良好,那么您已经在同一个CentOS服务器上成功配置了新的Nginx服务器块。
如果您调整您的家用电脑的hosts
文件,您可能需要删除,你现在还说您确认您的配置的工作线路。 这将阻止您的主机文件填充实际不必要的条目。
结论
此时,您现在应该有一个CentOS 7服务器处理具有单独域的多个站点。 您可以按照上述步骤扩展此过程,以便稍后再创建其他服务器块。 对于Nginx可以处理的域名数量没有软件限制,所以随意做出尽可能多的服务器是能够处理。