Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx的主要作用有:负载均衡、反向代理、动静分离、访问控制。
负载均衡:在高并发的情形下,一个Tomcat(或者其他web容器)很难保证服务的质量,这时候就需要将请求分发给多个Tomcat进行处理。Nginx就是承担这个职责的,通过配置Nginx给多个Tomcat不同的权重,然后会将请求根据权重比例进行分发给不同的Tomcat进行处理,从而实现不同的Tomcat承受着合适的压力。
反向代理:先说正向代理,就是用户通过一个代理来间接访问服务器,典型的如翻墙软件。反向代理就是用户访问服务器,服务器自己不亲自处理,而转发给代理去处理。用户访问Nginx,Nginx通过配置一个到多个Tomcat将收到的请求转发给Tomcat来真正处理,而自己只做一个代理的角色,即Nginx的反向代理功能。
动静分离:用户请求一个界面,伴随的可能有动态的如jsp,静态的如css,js,图片等资源。由于Tomcat对静态资源的吞吐量不及Nginx,所以Nginx可以对一次请求进行动静分离,对于静态请求直接由Nginx来处理,而动态jsp之类的Nginx无法处理的,再分发给Tomcat处理,也减少了Tomcat的工作负担。
访问控制:Nginx可以对请求进行访问的过滤拦截,主要有两种方式,Basic Auth认证和ip认证,可以实现对某一个ip段的拦截,以及用户的登陆认证等功能。
最后附上一张来自这里的示意图
图中Redis是为了解决Session共享问题,由于负载均衡之后,多个Tomcat的Session可能不一致,可以使用Redis存取Session解决。