【转】如何在Ubuntu 14.04 LTS上设置Nginx虚拟主机
介绍
转自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虚拟主机的更多相关文章
- 如何在Ubuntu 18.04 LTS上安装和配置MongoDB
MongoDB是一款非关系型数据库,提供高性能,高可用性和自动扩展企业数据库. MongoDB是一个非关系型数据库,因此您不能使用SQL(结构化查询语言)插入和检索数据,也不会将数据存储在MySQL或 ...
- 如何在Ubuntu 14.04服务器上自动化部署Spring Boot的应用
https://segmentfault.com/a/1190000003944843
- ubuntu 14.04服务器上使用nginx搭建wordpress博客详解
过程详解 1.更新apt-get sudo apt-get update 2.安装nginx sudo apt-get install nginx 3.启动nginx sudo service ngi ...
- Ubuntu 14.04 LTS 安装 Juno 版 OpenStack Keystone
本文介绍如何在Ubuntu 14.04 LTS 上安装Juno版的Keystone, 我们采用的是手动安装的方式, 同时仅针对OpenStack的身份与访问管理系统Keystone. 事实上OpenS ...
- 如何在 Ubuntu 14.04 里面配置 chroot 环境
你可能会有很多理由想要把一个应用.一个用户或者一个环境与你的 Linux 系统隔离开来.不同的操作系统有不同的实现方式,而在 Linux 中,一个典型的方式就是 chroot 环境. 在这份教程中,我 ...
- VM Depot 中国上的 Bitnami 镜像更新至 Ubuntu 14.04 LTS
发布于 2014-08-13 作者 陈 忠岳 随着越来越多中国本地镜像源源不断地加入, VM Depot 中国站点也在日益壮大(http://msopentech.com/?p=865871) ...
- Ubuntu 14.04 LTS 更新源大全
Ubuntu 14.04 LTS 系统更新源汇总 如何使用这些系统更新源?---三步走 首先备份源列表: sudo cp /etc/apt/sources.list /etc/apt/sources. ...
- Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程
Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程 在新的Ubuntu 64位系统下去编译早期的安卓源码是会出现很多问题的,因为64位系统在安装完成后,很多32位的兼容 ...
- Ubuntu 14.04 LTS 64bit 编译SDL的问题
http://blog.csdn.net/jhting/article/details/38523945 Ubuntu 14.04 LTS 64bit 编译SDL的问题 分类: C/C++2014-0 ...
随机推荐
- [ACM] POJ 2689 Prime Distance (筛选范围大素数)
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12811 Accepted: 3420 D ...
- 在WPF窗体中重绘
原文:在WPF窗体中重绘 写这篇主要是为了验证任何元素自身都具备绘图功能. 在默认Window中重写OnRender方法 protected override void OnRender(Draw ...
- 机器学习: t-Stochastic Neighbor Embedding 降维算法 (二)
上一篇文章,我们介绍了SNE降维算法,SNE算法可以很好地保持数据的局部结构,该算法利用条件概率来衡量数据点之间的相似性,通过最小化条件概率 pj|i 与 pi|j 之间的 KL-divergence ...
- 给 Web 开发人员推荐的通用独立 UI 组件(一)(按钮很不错)
现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高.在推荐完图形库之后,再来推荐一些精品的独立 UI 组件.这些组件可组合在一起,形成美观而交互强大的 Web UI . 给 We ...
- 1.通过模板创建MAP版本项目
1.选择mpa+ef+module-zero 取名字 2.用vs打开项目后,在解决方案上右键 还原nuget包 3.打开程序包管理器控制台,选择以EntityFramework结尾的项目,并执行upd ...
- Go语言的网络功能太强了,这么多项目。。。
Centrifugo 是一个用 Golang 实现的基于 Websocket 或者 SockJS 的实时通信平台.https://www.oschina.net/p/centrifugalrpcx是一 ...
- WPF 循环显示列表
原文:WPF 循环显示列表 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/SANYUNI/article/details/79423707 项目需要 ...
- cross-compile-openssl-windows.sh,cross-compile-curl-windows.sh,cross-compile-zlib-windows.sh,build-zlib-visual-studio-2015-cli.bat
https://gist.github.com/artynet build zlib with Visual Studio CLI toolhttps://gist.github.com/artyne ...
- C# IDisposable接口的使用
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 用MVVM模式开发中遇到的零散问题总结(5)——将动态加载的可视元素保存为图片的控件,Binding刷新的时机
原文:用MVVM模式开发中遇到的零散问题总结(5)--将动态加载的可视元素保存为图片的控件,Binding刷新的时机 在项目开发中经常会遇到这样一种情况,就是需要将用户填写的信息排版到一张表单中,供打 ...