Nginx核心模块ngx_http_proxy_module与nginx反向代理、负载均衡详解

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

反向代理(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的这种反向代理方案主要是为了降低上游服务器的并发压力。

负载均衡的基本配置
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值