Nginx 先容

Nginx 是俄罗斯人编写的十分轻量级的 HTTP 做事器, Nginx,它的发音为 “ engine X ”,是一个高性能的 HTTP 和反向代理做事器,同时也是一个 IMAP/ POP3/ SMTP 代理做事器。
Nginx 是由俄罗斯人 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开拓的,它已经在该站点运行超过两年半了。
Igor Sysoev 在建立的项目时,利用基于 BSD 容许。

Nginx 作为 HTTP 做事器,有以下几项基本特性:

nginxphp静态页面应用 Nginx 安排静态页面的办法 JavaScript

处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。
无缓存的反向代理加速,大略的负载均衡和容错。
FastCGI,大略的负载均衡和容错。
模块化的构造。
包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。
如果由 Fast CGI 或其它代理做事器处理单页中存在的多个 SSI,则这项处理可以并走运行,而不须要相互等待。
支持 SSL 和 TLSSNI。

即 Nginx 的优点:轻量、高性能、并发能力强。
用来支配静态页面也是相称便捷。

这种高性能得益于 Nginx 的框架。
在 Nginx 启动后,会有一个 master 进程和多个 worker 进程。
master 进程紧张用来管理 worker 进程,包含:吸收来自外界的旗子暗记,向各 worker 进程发送旗子暗记,监控 worker 进程的运行状态,当 worker 进程退出后(非常情形下),会自动重新启动新的 worker 进程。
而基本的网络事宜,则是放在 worker 进程中来处理的。
多个 worker 进程之间是对等的,他们同等竞争来自客户真个要求,各进程相互之间是独立的。
一个要求,只可能在一个 worker 进程中处理,一个 worker 进程,不可能处理其它进程的要求。
worker 进程的个数是可以设置的,一样平常我们会设置与机器 cpu 核数同等,这与 Nginx 的进程模型以及事宜处理模型有关。

为何选用 Nginx

说到 Nginx,可能第一反应便是 反向代理 和 负载均衡 了。
那么什么是 反向代理,什么又是 负载均衡 呢?

反向代理

首先理解一下什么是 前向代理 。
代理 (Proxy) 也称网络代理,是一种分外的网络做事,普通来讲,便是在客户端和目标做事器之间的充当中间人,吸收客户真个要求,再根据客户端要求向目标做事器发起相应的要求,从目标做事器得到指定资源后返回给客户端。
且代理做事器可以对目标做事器的资源下载至本地缓存,如果客户端所要获取的资源在代理做事器的缓存之中,则代理做事器并不会再向目标做事器发起要求,而是直接返回缓存的资源。

实在代理做事器非常常见,就比如由于 GWF 而存在的一些科学上网的代理商,便是利用国外做事器作为代理做事器,从而精确解析域名来实现科学上网。
代理做事器也可以实现隐蔽真实 IP,比如著名的 Tor (洋葱路由器)便是通过多重代理和一些加密技能来实现匿名互换。

而 反向代理 则是在做事器端作为代理利用,而不是客户端。
也便是说,前向代理 是代理内部网络用户访问 Internet 上做事器的连接要求,反向代理 因此代理做事器来接管 Internet 上的连接要求,然后将要求转发给内部网络上的做事器,并将从做事器上得到的结果返回给 Internet 上要求连接的客户端,此时的代理做事器对外就表现为一个做事器。

负载均衡

反向代理负载均衡技能是把将来自 Internet 上的连接要求以反向代理的办法动态地转发给内部网络上的多台做事器进行处理,从而达到负载均衡的目的。

真巧, Nginx 都做到了

Nginx 作为一个精良的代理做事器,反向代理和负载均衡一定是都具备的。
想要更详细得理解这方面的知识和利用方法,可拜会文末给出的参考资料: Nginx 入门指南。

Nginx 安装

本人利用的是腾讯云的做事器,版本为: Ubuntu Server 14.04.1 LTS 32 位。

$ apt-get install nginx

Mac OS 系统参考这篇文章:Installing Nginx in Mac OS X

Nginx 配置

大略地配置 Nginx 的配置文件,以便在启动 Nginx 时去启用这些配置。
而本文的重点也是于此。

Nginx 的配置系统由一个主配置文件和其他一些赞助的配置文件构成。
这些配置文件均是纯文本文件,一样平常地,我们只须要配置主配置文件就行了。
例如在我的做事器上是在:/etc/nginx/nginx.conf 。

指令高下文

nginx.conf 中的配置信息,根据其逻辑上的意义,对它们进行了分类,也便是分成了多个浸染域,或者称之为配置指令高下文。
不同的浸染域含有一个或者多个配置项。

个中每个配置项由配置指令和指令参数构成,形成一个键值对,# 后面地为注释,理解起来也非常随意马虎。

一样平常配置文件的构造和通用配置如下:

user www-data; # 运行 nginx 的所属组和所有者

worker_processes 1; # 开启一个 nginx 事情进程,一样平常 CPU 几核就写几

pid /run/nginx.pid; # pid 路径

events {

worker_connections 768; # 一个进程能同时处理 768 个要求

# multi_accept on;

}

# 与供应 http 做事干系的配置参数,一样平常默认配置就可以,紧张配置在于 http 高下文里的 server 高下文

http {

##

# Basic Settings

##

... 此处省略通用默认配置

##

# Logging Settings

##

... 此处省略通用默认配置

##

# Gzip Settings

##

... 此处省略通用默认配置

##

# nginx-naxsi config

##

... 此处省略通用默认配置

##

# nginx-passenger config

##

... 此处省略通用默认配置

##

# Virtual Host Configs

##

... 此处省略通用默认配置

# 此时,在此添加 server 高下文,开始配置一个域名,一个 server 配置段一样平常对应一个域名

server {

listen 80; # 监听本机所有 ip 上的 80 端口

server_name _; # 域名:www.example.com 这里 \公众_\"大众 代表获取匹配所有

root /home/filename/; # 站点根目录

location / { # 可有多个 location 用于配置路由地址

try_files index.html =404;

}

}

# 邮箱的配置,由于用不到,以是把这个 mail 高下文给注释掉

#mail {

# # See sample authentication script at:

# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript

#

# # auth_http localhost/auth.php;

# # pop3_capabilities \"大众TOP\"大众 \"大众USER\"大众;

# # imap_capabilities \"大众IMAP4rev1\公众 \"大众UIDPLUS\"大众;

#

# server {

# listen localhost:110;

# protocol pop3;

# proxy on;

# }

#

# server {

# listen localhost:143;

# protocol imap;

# proxy on;

# }

#}

这里须要把稳的是 http 高下文里的 server 高下文。

server {

listen 80; # 监听本机所有 ip 上的 80 端口

server_name _; # 域名:www.example.com 这里 \"大众_\公众 代表获取匹配所有

root /home/filename/; # 站点根目录

location / { # 可有多个 location 用于配置路由地址

try_files index.html =404;

}

}

这里的 root 字段最好写在 location 字段的外边,防止涌现无法加载 css、js 的情形。
由于 css、js 的加载并不是自动的,nginx 无法实行,须要额外的配置来返回资源,以是,对付静态页面的支配,这样做是最为方便的。

这里对 root 作进一步阐明,例如在做事器上有 /home/zhihu/ 目录,其下有 index.html 文件和 css/ 以及 img/ , root /home/zhihu/; 就将指定做事器加载资源时是在 /home/zhihu/ 下查找。

其次, location 后的匹配分多种,其各种匹配办法优先级也各不相同。
这里列举一精确匹配例子:

server {

listen 80;

server_name _;

root /home/zhihu/;

location = /zhihu {

rewrite ^/. / break;

try_files index.html =404;

}

}

此时,访问 www.example.com/zhihu 就会加载 zhihu.html 出来了。
由于 location 的精确匹配,只有访问 www.example.com/zhihu 这个路由时才会精确相应,而且此时要通过 rewrite 正则匹配,把 /zhihu 解析更换本钱来的 / 。
关于更多 location 字段用法,可以在文章末了给出的参考资料中查看。

关于利用 nginx 支配静态页面,最大略便捷的配置方法

上面说了挺多关于配置的解释,下面推举一种个人认为最为便捷的配置方法。
(特此感谢 guyskk 学长的答疑解惑)

首先创建一个目录,例如: /home/ubuntu/website 然后在这个 website 文件夹下可以放置你须要支配的静态页面文件,例如 website 下我有 google、zhihu、fenghuang 这三个文件夹,个中 server 字段配置如下:

server {

listen 80;

server_name _;

root /home/ubuntu/website;

index index.html;

}

这里每个文件夹下面的静态页面文件名都是 index.html ,我以前有个很不好的习气,比如 zhihu 页面就喜好命名为 zhihu.html ,但就从前端来看,这也是不符合规范的。

这样配置的话,例如当你访问 www.showzeng.cn/google/ 时,nginx 就会去 website 目录下的 google 文件夹下探求到 index.html 并把 google 页面返回,同理,访问 www.showzeng.cn/zhihu/ 时,会探求到 zhihu 文件夹下的 index.html 并把 zhihu 页面返回。

而在 zhihu、google 、fenghuang 文件夹的同级目录上,再添加你的域名首页 index.html 时,访问 www.example.com 时就会返回了。

这里唯一美中不敷的是,访问域名中 www.showzeng.cn/zhihu 末端会自动加上 / ,在浏览器中按 F12 调试会创造 www.showzeng.cn/zhihu 为 301 状态码,由于 index.html 是在 zhihu/ 文件夹下,以是在搜索过程中会重定向到 www.showzeng.cn/zhihu/ ,起初我是接管不了的,那一 / 看起来太难熬痛苦了,但是只要一想到要一个一个 location 字段去匹配,我一下子就接管了。
不知道你怎么看,反正我是接管了。

Nginx 启动运行

$ sudo nginx -s reload

利用 reload 方法不用重启做事,直接重新加载配置文件,客户端觉得不到做事非常,实现平滑切换。
当然你也可以重新启动 nginx 做事。

$ sudo service nginx restart

Nginx 停滞运行

$ sudo nginx -s stop

干系推举:

nginx运用:利用nginx进行负载均衡

利用nginx搭建高可用,高并发的wcf集群

以上便是利用 Nginx 支配静态页面的方法的详细内容,更多请关注其它干系文章!

更多技巧请《转发 + 关注》哦!