关于Nginx的使用小结

一. 背景说明

Nginx是一个高性能的HTTP和反向代理服务器,自诞生起,以其稳定性、丰富的功能集、示例配置文件和低系统资

的消耗而闻名。在高连并发的情况下,Nginx是Apache服务器不错的替代品:能够支持高达50000个并发连接数的响

应。因此其作为web服务器被广泛应用到大流量的网站上,包括腾讯、新浪、网易等访问量巨大的网站。


二.为什么选择Nginx


(1) 更快

这表现在两个方面:一方面,在正常情况下,单次请求会得到更快的响应;另一方面,在高峰期(如有数以万计的

并发请求),Nginx可以比其他web服务器更快的饿响应请求。


(2)高扩展性

Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。因此,当对

摸一个模块修复Bug或进行升级时,可以专注于模块自身,无须在意其他。这种低耦合度的优秀设计,早就了Nginx

大的第三方模块。

 

(3)高可靠性

高可靠性是我们选择Nginx的最基本条件,因为Nginx的可靠性是大家有目共睹的,很多家高流量网站都在核心服务

器上大规模使用NginxNginx的高可靠性来自于其核心框架代码的优秀设计、模块设计的简单性;另外,官方提供的

常用模块都非常稳定,每个worker进程相对独立,master进程在1worker进程出错时可以快速“拉起”新的worker

进程提供服务(在后续章节的demo中会演示该过程)。


(4)低内存消耗

一般情况下,10000个非活跃的HTTPKeep-Alive连接在Nginx中仅消耗2.5MB的内存,这是Nginx支持高并发连接的

基础。

 

(5)单机支持10万以上的并发连接

这是一个非常重要的特性!随着互联网的迅猛发展和互联网用户数量的成倍增长,各大公司、网站都需要应付海量

并发请求。理论上,Nginx支持的并发连接上限取决于内存,10万远未封顶。

 

(6)热部署

master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即可以在7*24小时不间断服务的前提

下,升级Nginx的可执行文件。当然,它也支持不停止服务就更新配置项、更换日志文件等功能。


三.关于反向代理


反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网路上

的服务器,并将从服务器得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

通俗的说,反向代理方式实际上就是一台负责转发的代理服务器,冒死充当了真正服务器的功能,但实际上并不

是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据。例如我们让Nginx监听一个9999端

口,但实际上我们转发给在8080端口的tomcat,由它来处理真正的请求,当请求完成后,tomcat返回,但数据此时没

直接返回,而是直接给Nginx,由Nginx进行返回,这里,我们会以为是Nginx进程了处理,但实际上进程处理的tomcat。

由于Nginx具有“强悍”的高并发高负载能力,因此一般会作为前端的服务器直接向客户端提供静态文件服务于,通常

Nginx会被配置为即是静态web服务器也是反向代理服务器,不适合Nginx处理的请求就会直接转发到上游服务器中处

理。因此我们可以用Nginx缓存那个静态文件,比如CSS,JS,HTM,PNG,JPEG等文件。

关于Nginx的使用小结_第1张图片


下面将会用一个例子来演示Nginx的反向代理的配置过程。


(1) 首先我们要先下载软件。可以到官网下载http://nginx.org/en/download.html。由于我的电脑是Mac OS的, 所

以我下载的Mac版本的。但基本的操作在各个系统都类似。直接cd到下载的目录中,然后输入start nginx即可。在浏览

器地址栏中输入http://localhost,如果启动成功的话我们会看到如下界面:


关于Nginx的使用小结_第2张图片

(2) 我们在Nginx的安装目录中找到nginx.conf,可以看到

关于Nginx的使用小结_第3张图片

(mac版本的默认的监听端口是8080,windows版本的默认的监听端口是80).


这是nginx.conf最基础的配置,下面我们来简单介绍一下:

listen:表示当前的代理服务器监听的端口,注意,如果我们配置了多个server,这个listen要设置成不一样(我在这里监

听的9999)。


Server_name:表示监听到之后需要转到哪里去,这时我们直接转到本地,也就是Nginx本地的文件夹内。


Location:表示匹配的路径,后面的“/”表示匹配了/的所有请求会被匹配到这里。


Root:root表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,这里对于我们将Nginx作为静态文件

缓存很有作用,我们可以把那些静态的文件都放在一个文件夹里,然后root指向这个路径即可。


Index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找

第二个,依次类推。


下面我们将介绍如何进行反向代理,其实很简单,我们只要更改location模块内的配置即可(#代表注释),如下图所示:


关于Nginx的使用小结_第4张图片

因为我的tomcat 7.0.68 是在8080端口的,可以根据自己的需要修改。这里有一个新元素proxy_pass,它表示代理路径,

相当于转发,而不像之前说的root必须指定一个文件夹。

此时我们修改了配置文件,我们需要reload一下nginx。



如果一切顺利,在浏览器地址栏中输入localhost:9999,我们会看到如下界面:


关于Nginx的使用小结_第5张图片


此时我们点击什么链接都是没有问题的,和访问http://localhost:8080一样。

上述小例子讲述了如何进行反向代理的配置,即将Ngnix作为代理服务器,tomcat作为上游服务器。


四. 关于静态服务器

前面的例子让Nginx进行了转发,即所谓的反向代理。但实际上我们的需求不会是这样的,我们需要份文件类型来进

行过滤,比如jsp这种动态请求直接给tomcat处理,如前所述,nginx不适合处理动态的请求。而像html,css,js等一

些静态文件可以直接给nginx进行缓存。此处我们需要用到location已经在过滤时使用正则表达式。修改如下图所示:


关于Nginx的使用小结_第6张图片


我们可以打开root对应的路径看一下,该文件夹放置的静态文件:


关于Nginx的使用小结_第7张图片


该文件夹下主要放置的是tomcat首页的一些图片以及css等静态文件。修改完文件之后,还是需要reload一下。此时

我们在浏览器中输入http://localhost:9999。如下图所示:


关于Nginx的使用小结_第8张图片

当我们不指定jsp页面的时候,它会出现找不到,因为,此时并没有相应的location匹配,所以就会有404错误,这时

就跳到了nginx自定义的error页面了。


而当我们使用http://localhost:9999/index.jsp去访问时,我们看到了熟悉的页面:

关于Nginx的使用小结_第9张图片


而且图片那些都是显示正常,因为图片是png格式的,所以直接在tomcat/webapps/ROOT目录下直接查找,但是,如

果我们点击那些链接,例如Manager Application HOW-TO这个链接,我们发现:


这是因为html结尾的文件会被过滤到ROOT文件夹下,而该文件夹下并没有这个html文件,而是在docs下面的,所以就

会报错了。


五.关于负载均衡

作为代理服务器,一般都需要向上游服务器的集群转发请求。这里的负载均衡是指选择一种策略,尽量把请求平

均的分布到每一台上游服务器上。这里我来介绍下最基本的配置。

我们还是需要修改nginx.conf文件,在http模块里面新添加一个upstream 模块。并修改location中proxy_pass的参

数值。具体修改如下:


关于Nginx的使用小结_第10张图片

可以看见我们在upstream中添加了两台服务器,一台的8080对应的是tomcat7.0,而8088的对应的是tomcat8.5。此时,

我们reload之后,在浏览器地址栏中输入localhost:9999。我们发现页面显示有可能是tomcat7.0的主页,也有可能是

tomcat8.5的主页


关于Nginx的使用小结_第11张图片关于Nginx的使用小结_第12张图片


此时,如果我们如果强制关掉其中任一个服务器(模拟一台服务器挂了),我们发现Nginx自动连接到另外一个服务器

中去了。

那如果我们只是希望一个服务器访问的机会比另外一个大,我们只需要在server后加上一个weight的权值即可,数字越

大,表面请求到的机会越大。如图所示:


关于Nginx的使用小结_第13张图片

此时我们再次刷新浏览器,我们发现tomcat8.5出现的概率明显大了很多。


六. 关于HTTPS的配置

HTTPS(Hyper Text Transfer Protocol Secure),是一种基于SSL/TLS的HTTP,所有的HTTP数据都是在SSL/TLS协议

封装之上进行传输的。HTTPS协议是在HTTP协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层

协议。HTTPS使用的默认端口是443。

     而在Nginx中我们也可以进行HTTPS虚拟服务器的搭建,具体如下:


关于Nginx的使用小结_第14张图片


这里我由于本机443端口被占用,这里我监听的4444端口。ssl_certificate 对应的是server.crt证书存放的url,

ssl_certifiate_key是密钥存放的url。此时我们访问https://localhost:4444,我们就又可以看到tomcat8.5的主页了。


关于Nginx的使用小结_第15张图片


然而对于用户而言,很多用户不了解http和https的区别,经常会误输,因此我们希望当用户输入http的,我们的页面还

是可以跳转到https的页面。在Nginx中也是可以做到的,保持上述配置不变,修改http服务器中的重转发地址即可,具

体配置如下:


关于Nginx的使用小结_第16张图片

此时,我们再次在浏览器中输入localhost:9999,我们发现浏览器跳转到了https://localhost:4444 上面。

七. 总结

因为篇幅有限,以上内容只对于Nginx主要的几个功能做了最简单的配置,Nginx还提供很多其他的个性化配置,

除此之外还有第三方的模块可供选择,甚至我们还可以自己编写http模块,为自己订制一个。其他的具体配置可参

考Nginx的wiki。



你可能感兴趣的:(杂类)