介绍

转自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-3

使用Nginx Web服务器时,可以使用server blocks(类似于Apache中的虚拟主机)来封装配置详细信息,并托管单个服务器的多个域。

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

先决条件

在本教程中,我们将使用具有sudo权限的非root用户。 如果没有这样配置的用户,可以通过Ubuntu 14.04初始服务器设置教程中按照步骤1-4生成一个用户。

还需要在服务器上安装Nginx。 如果需要在服务器上拥有整个LEMP(Linux,Nginx,MySQL和PHP)堆栈,可以按照在Ubuntu 14.04中设置一个LEMP栈的教程。如果只需要Nginx,键入以下内容完成:

sudo apt-get update
sudo apt-get install nginx

满足这些要求后,便可以继续使用本教程。

为了演示,我们将使用Nginx服务器设置两个域。我们在本教程中使用的域名是example.com和test.com。

第一步 设置新文档根目录

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

/usr/share/nginx/html

我们不会使用默认值,因为我们更容易处理/var/www目录中的内容。默认情况下,Ubuntu的Nginx包不使用/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

如果用户没有修改其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>

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

第三步 为每个域创建server blocks(服务器块)文件

现在已有我们希望服务的内容,还需要实际创建服务器块,它将告诉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

现已创建服务器块,然后需要启用它们。

通过从这些文件创建符号链接,到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成功配置了两个独立的服务器块。

此时,如果用户在本地计算机上调整了主机文件以进行测试,则可能需要删除添加的行。

结论

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

【转】如何在Ubuntu 14.04 LTS上设置Nginx虚拟主机的更多相关文章

  1. 如何在Ubuntu 18.04 LTS上安装和配置MongoDB

    MongoDB是一款非关系型数据库,提供高性能,高可用性和自动扩展企业数据库. MongoDB是一个非关系型数据库,因此您不能使用SQL(结构化查询语言)插入和检索数据,也不会将数据存储在MySQL或 ...

  2. 如何在Ubuntu 14.04服务器上自动化部署Spring Boot的应用

    https://segmentfault.com/a/1190000003944843

  3. ubuntu 14.04服务器上使用nginx搭建wordpress博客详解

    过程详解 1.更新apt-get sudo apt-get update 2.安装nginx sudo apt-get install nginx 3.启动nginx sudo service ngi ...

  4. Ubuntu 14.04 LTS 安装 Juno 版 OpenStack Keystone

    本文介绍如何在Ubuntu 14.04 LTS 上安装Juno版的Keystone, 我们采用的是手动安装的方式, 同时仅针对OpenStack的身份与访问管理系统Keystone. 事实上OpenS ...

  5. 如何在 Ubuntu 14.04 里面配置 chroot 环境

    你可能会有很多理由想要把一个应用.一个用户或者一个环境与你的 Linux 系统隔离开来.不同的操作系统有不同的实现方式,而在 Linux 中,一个典型的方式就是 chroot 环境. 在这份教程中,我 ...

  6. VM Depot 中国上的 Bitnami 镜像更新至 Ubuntu 14.04 LTS

     发布于 2014-08-13 作者 陈 忠岳 随着越来越多中国本地镜像源源不断地加入,  VM Depot 中国站点也在日益壮大(http://msopentech.com/?p=865871) ...

  7. Ubuntu 14.04 LTS 更新源大全

    Ubuntu 14.04 LTS 系统更新源汇总 如何使用这些系统更新源?---三步走 首先备份源列表: sudo cp /etc/apt/sources.list /etc/apt/sources. ...

  8. Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程

    Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程   在新的Ubuntu 64位系统下去编译早期的安卓源码是会出现很多问题的,因为64位系统在安装完成后,很多32位的兼容 ...

  9. Ubuntu 14.04 LTS 64bit 编译SDL的问题

    http://blog.csdn.net/jhting/article/details/38523945 Ubuntu 14.04 LTS 64bit 编译SDL的问题 分类: C/C++2014-0 ...

随机推荐

  1. ssh基础(1)

    1.链接远程 命令:ssh root@1.1.1.1 2.执行远程脚本 命令:ssh root@1.1.1.1  /data/demo/test.sh > 111.txt   (执行远程的tes ...

  2. 计算广告(computational advertising)

    计算广告学是一门由信息科学.统计学.计算机科学以及微观经济学等学科交叉融合的新兴分支学科. 1. 课程与资源 Andrei Broder:美国工程院院士,计算广告概念的提出者: MS&E 23 ...

  3. HistCite 引文分析软件的利器

    所需工具及网站清单, HISTCITE:DOWNLOAD YOUR FREE COPY. 提交自己的基本信息即可,十分简单: SCI数据库官网(web of science):http://apps. ...

  4. OpenGL(三) RGBA颜色设置

    OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 像素点附加颜色信息之后,就必须为每一个像素点额外分配一个内存空间保存该点的颜色信息,对于RGBA颜色模式,保存的数据直接代表了颜色, ...

  5. Vertica变化Local时间到GMT时间

    在Vertica的数据库的使用过程中碰到这么一种场景.程序从不同一时候区的集群中收集数据写入同一张表,然后我们须要把这些数据依照GMT时间来显示. 此时我们能够通过Vertica提供TIME ZONE ...

  6. [转]更改ejs模板后缀.ejs为.html

    三种写法 1,express老写法,3.*已经不支持 app.register('.html', require('ejs')); app.set('view engine', 'ejs'); 2, ...

  7. WPF 4 DataGrid 控件(基本功能篇)

    原文:WPF 4 DataGrid 控件(基本功能篇)      提到DataGrid 不管是网页还是应用程序开发都会频繁使用.通过它我们可以灵活的在行与列间显示各种数据.本篇将详细介绍WPF 4 中 ...

  8. Asp UserInfoList 方法二

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserInfoList.a ...

  9. 待修 Bug

    # 乱码 ## 描述 环境:Tomcat 8 + Spring 4 + Spring Security. 问题描述: 在类 AbstractAnnotationConfigDispatcherServ ...

  10. Android之运行时相机权限和联系人权限获取

    原文:Android之运行时相机权限和联系人权限获取 本文链接:http://blog.csdn.net/qq_16628781/article/details/61623502 Android之运行 ...