Java 程序员应掌握的 Nginx 实战应用(一)

一、常用的 Web 服务器介绍

服务器介绍

Web 服务器分为静态服务器和动态服务器,静态服务器就是处理静态资源的,比如 HTML、CSS、JS,常用的静态服务器有 Apache、Nginx;动态服务器就是处理动态请求的,比如 JSP,Servlet 等,常用的有 Tomcat、Weblogic。

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器,能够支持 5 万个并发连接,内存、CPU 消耗非常低,是基于七层协议的服务。

反向代理介绍

我们平时说的代理指的是代理客户端,这个是正向代理,反向代理指的是代理服务端。

我们作为用户想访问一个服务资源 URL,如果我们的浏览器直接打不开这个 URL,一般会通过 VPN 或者其他代理服务器中转,这种情况下的代理就是正向代理,也就是我们通常说的代理的意思。

而反向代理是指,作为服务资源提供方,内部有很多服务器,这些服务器不能全部暴露给第三方用户,因此需要在内部服务器的前面加一个代理服务器,用户访问的是代理服务的 IP,而不知道具体访问的是服务端的哪台机器,这种情况就是反向代理,指的是代理服务端。

二、Nginx 在分布式架构中的作用

分布式架构的演进

一个网站的初期,访问的流量比较小,选用的架构可能就是用户通过域名访问,经过域名解析(DNS 服务器),拿到后端服务器的 IP 地址,直接访问到这个 IP 所对应的 Tomcat 服务器,这是最简单的一个网站架构。

随着用户流量的增大,一台 Tomcat 服务器无法满足用户的请求,因此人们会想到 2 个办法:

升级这台服务器更换更强大的硬件,这就是垂直扩展; 增加新的服务器来分担前端流量,这就是水平扩展。 垂直扩展的方式就是对一台服务器不断加强硬件,但是服务器的可扩展内存会有上限,总会达到瓶颈,而且成本比较高,因此人们一般会选择水平扩展。一台不够再加一台,不行再加一台......

为了应对流量的增加,不断地增加后端服务器的数量,那么服务器的 IP 会越来越多,通过 DNS 服务器管理这些服务器 IP 带来了新的问题:

后端的某台机器宕机后,DNS 服务器不知道该机器宕机,仍然解析到了这个 IP,如果用户访问到了这个宕机的 IP,那么系统无法为用户提供服务; DNS 服务器配置新的 IP 后,它不会立即生效,那么在它生效的这个时间段,新加的服务器不会为用户提供服务。 反向代理和负载均衡服务器可以很好地解决上面的问题。

用了反向代理服务器后,网站的架构就进一步演进,变成了用户通过域名访问,DNS 服务器返回反向代理服务器的 IP,反向代理服务器根据被代理服务器的 IP 配置和负载均衡的策略,转发用户的请求到不同的后端服务器,后端服务器返回响应结果到反向代理服务器,反向代理服务器返回结果给用户。

反向代理服务器因为只转发用户的请求而不做具体处理,因此它的性能比应用服务器强大。

随着流量的继续增大,单台反向代理服务器成为了瓶颈,我们就会对其做集群,解决高性能的问题,对其做主备解决高可用的问题。

至此,一个网站的分布式架构的演进过程介绍完了。

Nginx 在分布式架构的作用 通过上面的架构演进介绍,我们知道分布式架构中最重要的思路就是水平扩展,水平扩展最重要的一个环节就是反向代理和负载均衡。

Nginx 就是一个高性能的反向代理和负载均衡服务器,它可以支持 5 万的并发访问,同时它可以做动静分离,可以解决跨域访问和防盗链的问题。

文章永久链接地址:

https://github.com/java-aodeng/hope/tree/master/nginx/nginx1.md