如何在Ubuntu 14.04 LTS设置的Nginx服务器块(虚拟主机)

Nginx的是一个令人难以置信的强大的Web服务器和反向代理服务器。在本指南中,我们将讨论如何才能从一个单一的服务器架设在Ubuntu 14.04服务器块服务器的多个域。

介绍

当使用Nginx的网络服务器, server blocks (类似于Apache的虚拟主机),可用于封装配置的详细信息,并举办多个域关闭一台服务器。

在本指南中,我们将讨论如何在Ubuntu 14.04服务器上配置Nginx中的服务器块。

先决条件

我们将要使用一个非root用户sudo权限在本教程中。 如果你没有一个用户这样的配置,您可以通过以下第1步-4在我们做一个的Ubuntu 14.04服务器初始设置指南。

你还需要在你的服务器上安装Nginx。 如果你想要一个完整的LEMP(Linux的,Nginx的,MySQL和PHP)的服务器上,你可以按照我们的指南建立LEMP在Ubuntu 14.04 如果你只需要Nginx,你可以通过键入:

sudo apt-get update
sudo apt-get install nginx

满足这些要求后,您可以继续使用本指南。

为了演示的目的,我们将使用我们的Nginx服务器设置两个域。 我们将在本指南中所使用的域名是example.comtest.com

你可以找到一个指导如何建立域名与DigitalOcean在这里。 如果您没有两个备用域名可以使用,现在使用虚拟名称,我们将在稍后显示如何配置本地计算机来测试您的配置。

第一步 - 设置新文档根目录

默认情况下,Ubuntu 14.04上的Nginx默认情况下启用一个服务器块。 它被配置为从以下位置的目录中提供文档:

/usr/share/nginx/html

因为很容易在事情的工作,我们将不使用默认/var/www目录。 Ubuntu的软件包Nginx的不使用/var/www因为默认情况下它的根目录由于Debian政策有关使用的/ var / WWW包

因为我们是用户而不是包维护者,我们可以告诉Nginx这是我们想要我们的文档根。 具体来说,我们希望每一个我们的网站内的一个目录/var/www目录,我们将这些称为下一个目录html来保存我们的实际文件。

首先,我们需要创建必要的目录。 我们可以使用以下命令来做到这一点。 -p标志告诉mkdir创建沿途的任何所需的父目录:

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

现在您已创建目录,我们需要将所有权转让给我们的常规用户。 我们可以用$USER环境变量来替代我们目前签署的用户帐户。 这将允许我们在此目录中创建文件,而不允许我们的访问者创建内容。

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

我们的Web根权限应该是已经是正确的,如果你没有修改过umask价值,但我们可以通过输入确认:

sudo chmod -R 755 /var/www

我们的目录结构现在已配置,我们可以继续。

第二步 - 为每个网站创建示例页面

现在我们已经设置了目录结构,让我们为每个网站创建一个默认页面,以便我们有一些东西可以显示。

创建index.html在您的第一个域文件:

nano /var/www/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>

保存并在完成后关闭文件。

由于我们的第二个网站的文件基本上是一样的,我们可以将其复制到我们的第二个文档根,像这样:

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

现在,我们可以在我们的编辑器中打开新文件,并修改它,以便它引用我们的第二个域:

nano /var/www/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>

保存并在完成后关闭此文件。 您现在有一些网页向我们两个网域的访问者显示。

第三步 - 为每个域创建服务器块文件

现在我们有了我们希望服务的内容,我们需要实际创建服务器块,告诉Nginx如何做到这一点。

默认情况下,Nginx的包含一个服务器块调用default ,我们可以为我们自己配置的模板。 我们将首先设计我们的第一个域的服务器块,然后我们将为我们的第二个域复制,并进行必要的修改。

创建第一个服务器块文件

如上所述,我们将通过复制默认文件来创建我们的第一个服务器块配置文件:

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

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

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

忽略已注释的行,文件将类似于以下内容:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
    }
}

首先,我们需要看看listen指令。 只有我们的服务器块可以有default_server规范。 这将指定块应服务器的请求,如果server_name要求不匹配任何可用的服务器块。

我们最终将禁用默认的服务器模块配置,所以我们可以把default_server选项,在此服务器模块或一个为我们的其他网站。 我要离开这个default_server在此服务器数据块启动选项,但你可以选择任何最适合您的情况。

我们将要调整的下一件事是文档根目录,由指定的root指令。 将其指向您创建的网站的文档根目录:

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

注意 :每个Nginx的语句必须以分号(;)结尾,所以检查每个行,如果你正在运行到的问题。

下一步,我们要修改的server_name ,以配合我们的第一个域的请求。 我们可以添加任何我们想要匹配的别名。 我们将添加一个www.example.com别名来演示:

server_name example.com www.example.com;

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

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

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

    server_name example.com www.example.com;

    location / {
        try_files $uri $uri/ =404;
    }
}

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

创建第二个服务器块文件

现在我们有了我们的初始服务器块配置,我们可以使用它作为我们的第二个文件的基础。 将其复制以创建新文件:

sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/test.com

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

sudo nano /etc/nginx/sites-available/test.com

在这个新的文件,我们将不得不在看listen指令一次。 如果你离开了default_server在最后文件中启用选项,你必须在这个文件中删除。 此外,你必须摆脱的ipv6only=on选择,因为它只能使用一次,每个地址/端口组合规定:

listen 80;
listen [::]:80;

调整文档根指令以指向您的第二个域的文档根目录:

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

调整server_name来匹配你的第二个域和任何别名:

server_name test.com www.test.com;

您的文件应该看起来像这样与这些变化:

server {
    listen 80;
    listen [::]:80;

    root /var/www/test.com/html;
    index index.html index.htm;

    server_name test.com www.test.com;

    location / {
        try_files $uri $uri/ =404;
    }
}

完成后,保存并关闭文件。

第四步 - 启用您的服务器块并重新启动Nginx

现在您已创建了服务器块,我们需要启用它们。

我们可以通过创建这些文件的符号链接为此sites-enabled目录,其中Nginx的启动过程中读取。

我们可以通过键入以下内容创建这些链接:

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

这些文件现在位于已启用的目录中。 然而,我们使用作为模板的默认服务器块文件也当前启用和将与我们的文件,该文件具有冲突default_server参数集。

我们可以通过删除符号链接来禁用默认服务器块文件。 它仍然是可用于在参考sites-available目录,但它不会被Nginx的启动时读:

sudo rm /etc/nginx/sites-enabled/default

我们还需要在默认的Nginx配置文件中真正快速地调整一个设置。 键入以打开它:

sudo nano /etc/nginx/nginx.conf

我们只需要取消注释一行。 查找并删除此注释:

server_names_hash_bucket_size 64;

现在,我们准备重新启动Nginx以启用您的更改。 你可以通过键入:

sudo service nginx restart

Nginx现在应该为您的两个域名服务。

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

如果您没有使用自己的域名,而是使用了虚拟值,则可以修改本地计算机的配置,以允许您临时测试Nginx服务器块配置。

这将不允许其他访问者正确地查看您的网站,但它将让您能够独立访问每个网站并测试您的配置。 这基本上工作通过拦截通常去DNS解析域名的请求。 相反,我们可以设置当我们请求域名时我们希望本地计算机访问的IP地址。

确保您在这些步骤期间在本地计算机上操作,而不是您的VPS服务器。 您将需要具有root访问权限,成为管理组的成员,或者可以编辑系统文件来执行此操作。

如果您在家中的Mac或Linux计算机上,则可以通过键入以下内容编辑所需的文件:

sudo nano /etc/hosts

如果你是在Windows上,你可以找到改变您的主机文件的说明在这里。

您需要您的服务器的公共IP地址和您要路由到服务器的域。 假设我的服务器的公网IP地址为111.111.111.111 ,我想补充到我的文件看起来像这样的线路:

127.0.0.1   localhost
127.0.0.1   guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com

这将拦截任何请求example.comtest.com ,并将它们发送到您的服务器,这就是我们要,如果我们不实际拥有我们所使用的域。

保存并在完成后关闭文件。

第六步 - 测试你的结果

现在您已经完成设置,您应该测试您的服务器块是否正常工作。 您可以通过访问您的网络浏览器中的域:

http://example.com

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

Nginx第一个服务器块

如果您访问您的第二个域名,您应该看到一个稍微不同的网站:

http://test.com

Nginx第二个服务器块

如果这两个站点都工作,您已成功配置了两个独立的服务器块与Nginx。

在这一点上,如果你调整你的hosts ,以测试你的本地计算机上的文件,你可能会想删除您添加的行。

如果您需要为面向公众的网站访问您的服务器的域名,您可能需要为每个网站购买域名。 你可以学习如何将其设置为指向您的服务器在这里。

结论

您现在应该能够为您希望从同一服务器托管的每个域创建服务器块。 对您可以创建的服务器块数量没有任何实际限制,只要您的硬件可以处理流量。

作者:Justin Ellingwood