反向代理
反向代理(reverse proxy) 方式是指用代理服务器来接受Internet上的连接请求, 然后将
请求转发给内部网络中的上游服务器, 并将从上游服务器上得到的结果返回给Internet上请求
连接的客户端, 此时代理服务器对外的表现就是一个Web服务器。 充当反向代理服务器也是
Nginx的一种常见用法(反向代理服务器必须能够处理大量并发请求)
由于Nginx具有“强悍”的高并发高负载能力, 因此一般会作为前端的服务器直接向客户端提供静态文件服务。 但也有一些复杂、 多变的业务不适合放到Nginx服务器上, 这时会用Apache、 Tomcat等服务器来处理。 于是, Nginx通常会被配置为既是静态Web服务器也是反向代理服务器 , 不适合Nginx处理的请求就会直接转发到上游服务器中处理。

与其他反向代理服务器相比的不同点:
当客户端发来HTTP请求时, Nginx并不会立刻转发到上游服务器, 而是先把用户的请求(包括HTTP包体) 完整地接收到Nginx所在服务器的硬盘或者内存中, 然后再向上游服务器发起连接, 把缓存的客户端请求转发到上游服务器。 而Squid等代理服务器则采用一边接收客户端请求, 一边转发到上游服务器的方式。
缺点是延长了一个请求的处理时间,并增加了用于缓存请求内容的内存和磁盘空间。 而优点则是降低了上游服务器的负载, 尽量把压力放在Nginx服务器上。

Nginx的这种工作方式为什么会降低上游服务器的负载呢? 通常, 客户端与代理服务器之间的网络环境会比较复杂, 多半是“走”公网, 网速平均下来可能较慢, 因此, 一个请求可能要持续很久才能完成。 而代理服务器与上游服务器之间一般是“走”内网, 或者有专线连接, 传输速度较快。
Squid等反向代理服务器在与客户端建立连接且还没有开始接收HTTP包体时, 就已经向上游服务器建立了连接。 例如, 某个请求要上传一个1GB的文件, 那么每次Squid在收到一个TCP分包(如2KB) 时, 就会即时地向上游服务器转发。 在接收客户端完整HTTP包体的漫长过程中, 上游服务器始终要维持这个连接, 这直接对上游服务器的并发处理能力提出了挑战。
Nginx则不然, 它在接收到完整的客户端请求(如1GB的文件) 后, 才会与上游服务器建立连接转发请求, 由于是内网, 所以这个转发过程会执行得很快。 这样, 一个客户端请求占用上游服务器的连接时间就会非常短, 也就是说, Nginx的这种反向代理方案主要是为了降低上游服务器的并发压力。

本文深入解析Nginx的反向代理功能,探讨其与Squid等代理服务器的工作方式区别,以及如何通过Nginx实现负载均衡,包括upstream配置、ip_hash策略和反向代理的基本配置。
最低0.47元/天 解锁文章
1385

被折叠的 条评论
为什么被折叠?



