Nginx重要概念理解-正向代理和反向代理

本文介绍Nginx作为高性能Web服务器的功能,包括正向代理、反向代理及负载均衡原理。Nginx可替代客户端向服务器发送请求,或为客户端提供服务,同时作为优秀的负载均衡工具,提高网站响应速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        Nginx是有俄罗斯人伊戈尔·赛索耶夫(Igor Sysoev)为俄罗斯访问量第二的rambler.ru站点开发的轻量级Web服务器,同时也是一个非常高效的反向代理、负载平衡服务器。在性能上,Nginx占用很少的系统资源,能支持更多的并发连接,达到更高的访问效率;在功能上,Nginx是优秀的代理服务器和负载均衡服务器;在安装配置上,Nginx安装简单、配置灵活。

本文主要从正向代理,反向代理和负载均衡三个方面简单介绍Nginx的工作原理。

正向代理

正向代理

        正向代理也可以理解为客户端代理,Nginx代替客户端向明确的服务器发送请求,对于服务器来说客户端完全透明。如上图所示,客户机数量的多少不重要,重要的是客户机一定是知道将要访问的是哪台服务器。而且代理服务器是可以不知道客户机要访问哪里的,代理服务器可以从客户机的请求中解析出目标服务器的地址。

       在生活中很多场景都可以形象的展现正向代理的例子。比如客户去某品牌专卖店购物,在客户购买产品这个过程中,专卖店就是个代理的角色。对于客户而言,客户明确指明了购买哪个厂家的具体哪个产品,专卖店需要明确的去这个厂家取货就可以了。上述这样的代理模式称为正向代理。

        在软件应用的场景来说FQ最能体现这个正向代理模式。正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。

反向代理

方向代理

        反向代理也可以理解为服务端代理,Nginx代理服务器为客户端提供服务,对应客户端来说服务端完全透明。如上图所示,服务器数量的多少不重要,重要的代理服务器需要知道所有应用服务器的信息,并且给客户机提供服务的服务器最终是由代理服务器分配实现的。
       在生活中也有很多场景可以形象的展现方向代理的例子。我们以海外代购为例,客户告诉代购人需要某件产品,代购人出国后就去各个店铺挑选客户需要的产品,最终交给客户时客户是完全不知道自己的产品是来自哪家店铺。也就是说在这个过程中对于客户端而言店铺完全透明。这样的代理模式就称为反向代理。

        在软件应用场景来说负载均衡最能体现反向代理模式。反向代理最大的特点是客户端并不知道具体要访问的服务器地址,最终由哪个服务器提供服务有反向代理服务来决定。反向代理模式屏蔽或者隐藏了真实的服务端信息。

负载均衡

        Nginx就是性能非常好的反向代理服务器,用来做负载均衡。什么是负载均衡呢?负载均衡,英文名称为Load Balance,就是原本由一个人来说的工作,分散到了很多人身上,让大家都可以很轻松的完成工作。由于Nginx反向代理服务器转发请求在HTTP协议层面,因此通过Nginx实现的负载均衡也叫应用层负载均衡。优点是部署简单,网络的依赖非常小,并发能力高(5w次,一般服务器也有2K次的并发),通过端口检测到服务器内部的故障,缺点是不支持URL来检测,session的保持和cookie的引导能力欠缺。

总结:当然严格的来说,正向代理和反向代理是通常是融合在一起使用的,互为补充的。我这里算是强行将其概念化只是为了便于理解。

### Nginx在同一台服务器上实现正向代理反向代理 要在同一台服务器上配置Nginx作为正向代理反向代理,可以通过分别定义不同的监听端口来区分两种代理的功能。以下是具体的配置方法: #### 正向代理配置 正向代理允许客户端通过Nginx访问外部网络资源。通常情况下,这种设置会隐藏真实的客户端IP地址[^2]。 ```nginx http { server { listen 8080; # 定义正向代理使用的端口号 location / { resolver 8.8.8.8 ipv6=off; # 使用Google DNS解析域名 proxy_pass http://$host$request_uri; # 设置请求头中的X-Real-IP字段为真实客户端IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ``` 上述配置中,`resolver`指令用于DNS解析,而`proxy_pass`则动态转发到目标主机。 #### 反向代理配置 反向代理负责将来自客户端的请求转发至内部的服务端,并返回响应给客户端。其典型用途包括负载均衡服务隐藏[^1]。 ```nginx http { upstream backend { server 127.0.0.1:3000; # 假设本地运行了一个Node.js应用 server 127.0.0.1:3001 backup; # 备份节点 } server { listen 80; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } ``` 此部分利用了`upstream`模块创建一组后端服务器列表,其中还可以设定主备关系或者权重分配策略。 #### 综合考虑安全性性能优化 当两者共存于同一实例时,需注意调整worker参数以充分利用硬件资源并保持稳定性。最大可支持并发数可通过公式 `worker_processes * worker_connections / 4` 计算得出。例如,在多核CPU环境下适当增加`worker_processes`的数量有助于提升处理能力。 另外,为了防止冲突以及便于管理维护,建议分别为两类代理功能设立独立的日志记录路径与错误页面定制方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值