介绍

转自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. 配置mysql 及 设置密码

    https://jingyan.baidu.com/article/8cdccae946133f315513cd6a.html

  2. QT定时器的两种应用(QObject就有timerEvent事件,一种什么样的居心呢?)

    QT中定时器的使用方法(1)重载timerEvent(QTimerEvent *)函数,然后再在类的构造函数中设置时间间隔   startTimer(50);//单位为毫秒(2)在类的构造函数中设定如 ...

  3. PHP中遍历关联数组的方法

    下面介绍PHP中遍历关联数组的三种方法:foreach <?php $sports = array( 'football' => 'good', 'swimming' => 'ver ...

  4. 1 开始ThreeJs

    因为需要 需要一款 网页上的 游戏引擎 通过百度知道了 three.js 1.先从github上clone下源码  https://github.com/mrdoob/three.js 2.下载web ...

  5. [实时更新]jquery完整版下载

    jquery-2.1.0   注!不再支持IE 6/7/8 直接引用地址:  开发版地址1: <script src="http://code.jquery.com/jquery-2. ...

  6. WPF:将Office文档、任意类型文件嵌入到EXE可执行文件中

    原文:WPF:将Office文档.任意类型文件嵌入到EXE可执行文件中 版权声明:本文为博主原创文章,未经博主允许可以随意转载 https://blog.csdn.net/songqingwei198 ...

  7. 如何删除您的注册js图书馆bower私人图书馆

    建立你自己bower 这样的私人图书馆参考http://blog.csdn.net/nsrainbow/article/details/35988611 本文 假设我们想注册自己的创作js私人图书馆图 ...

  8. WPF 自定义验证规则

    <Window x:Class="DataBindingExam.MainWindow"        xmlns="http://schemas.microsof ...

  9. Rust这种新型的语言注定火不起来,功能太强大(特性太多),还不如用成熟稳定强大的C/C++,而且生态不行、所以恶性循环

    这种新型的语言注定火不起来,功能太强大(特性太多),还不如用成熟稳定强大的C/C++,,而Golang足够简单,入门快,编译快,性能也强悍,解决了服务端开发人员的痛点,,注定被大多数人接受... go ...

  10. c# Unity依赖注入WebService

    1.IOC与DI简介 IOC全称是Inversion Of Control(控制反转),不是一种技术,只是一种思想,一个重要的面相对象编程的法则,它能知道我们如何设计出松耦合,更优良的程序.传统应用程 ...