转自http://www.pandacademy.com/%E5%A6%82%E4%BD%95%E5%9C%A8ubuntu-14-04-lts%E4%B8%8A%E8%AE%BE%E7%BD%AEnginx%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA/#i-3php
使用Nginx Web服务器时,可使用server blocks
(相似于Apache中的虚拟主机)来封装配置详细信息,并托管单个服务器的多个域。css
在本教程中,咱们将讨论如何在Ubuntu 14.04服务器上配置Nginx中的服务器块。html
在本教程中,咱们将使用具备sudo权限的非root用户。 若是没有这样配置的用户,能够经过Ubuntu 14.04初始服务器设置教程中按照步骤1-4生成一个用户。mysql
还须要在服务器上安装Nginx。 若是须要在服务器上拥有整个LEMP(Linux,Nginx,MySQL和PHP)堆栈,能够按照在Ubuntu 14.04中设置一个LEMP栈的教程。若是只须要Nginx,键入如下内容完成:linux
sudo apt-get update sudo apt-get install nginx
知足这些要求后,即可以继续使用本教程。nginx
为了演示,咱们将使用Nginx服务器设置两个域。咱们在本教程中使用的域名是example.com和test.com。web
默认状况下,Ubuntu 14.04上的Nginx启用一个服务器块。它被配置为从如下位置的目录中提供文档:sql
/usr/share/nginx/html
咱们不会使用默认值,由于咱们更容易处理/var/www目录中的内容。默认状况下,Ubuntu的Nginx包不使用/var/www做为它的文档根目录。ubuntu
由于咱们是用户而不是包维护者,所以能够告诉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
若是用户没有修改其umask值,web根的权限应该是正确的,但也能够键入如下内容确保其正确性:
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 /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目录,以完成启动。
键入如下内容建立这些连接:
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
用户须要其服务器的公共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.com和test.com的任何请求,并将它们发送到用户服务器,若是实际上用户不拥有正在使用的域,这即是指望的结果。
在完成后保存并关闭文件。
现已设置完毕,用户应该测试服务器块是否正常工做。经过访问网络浏览器中的域完成:
http://example.com
应显示以下所示的页面:
若是要访问第二个域名,则应该看到一个稍有不一样的网站:
http://test.com
若是这两个站点都工做,则已使用Nginx成功配置了两个独立的服务器块。
此时,若是用户在本地计算机上调整了主机文件以进行测试,则可能须要删除添加的行。
用户如今应该可以为但愿从同一服务器托管的每一个域建立服务器块,只要其硬件能够处理流量,对能够建立的服务器块没有任何实际数量限制。