nginx的四种代理模式
Nginx 的代理模式从不同维度可以有不同的分类。从运维和架构设计的角度看最核心、最常用的主要有以下4 种。为了让你更直观地理解我用一个对比表格先总结它们的核心差异代理模式工作层级核心特点典型应用场景正向代理应用层代理客户端访问外网隐藏客户端身份公司内网统一上网出口、访问受限资源反向代理应用层代理服务端接收请求隐藏服务器身份负载均衡、Web应用发布、API网关四层代理传输层基于IP和端口转发不解析HTTP内容数据库读写分离、MySQL/Redis代理、TCP/UDP流量分发透明代理应用层/传输层客户端无感知无需手动配置代理企业网络审计、缓存加速1. 正向代理 (Forward Proxy)这是你平时可能接触比较多的模式比如在家里用VPN或“梯子”。工作对象客户端。工作流程客户端A想访问服务器B但它不直接访问而是把请求发给代理服务器CC再去访问BB以为请求是C发起的。A就通过C隐藏了自己的真实IP。在Nginx中的实现使用ngx_http_proxy_module模块配合resolverDNS解析器和proxy_pass指令。注意Nginx作为正向代理的功能相对基础高并发场景下不如Squid或HAProxy专业。作用访问被限制的网络资源如访问Google。缓存内容加速访问。隐藏客户端身份。2. 反向代理 (Reverse Proxy)这是Nginx最核心、最常用的功能也是我们刚才讨论Tomcat负载均衡时的核心。它是对外暴露的“大门”。工作对象服务端。工作流程客户端A想访问服务器B但它访问的是代理服务器C。C根据请求规则去访问内网中的B、D、E等服务器然后把结果返回给A。A根本不知道真正服务的是哪台机器。在Nginx中的实现使用proxy_pass指令将请求转发到一组upstream后端服务器集群。你之前看到的Tomcat负载均衡配置就是典型的反向代理。作用负载均衡将流量分发到多个后端服务器。高可用检测后端健康状态自动摘除故障节点。安全与加速提供SSL加密HTTPS、缓存静态内容减轻后端压力。3. 四层代理 (Layer 4 Proxy) -stream模块传统的Nginx主要工作在第七层应用层但从1.9.0版本开始引入了stream模块使其也能工作在第四层传输层。这是一个重要的区分。工作层级TCP/UDP协议层。它不关心你传输的是什么内容HTTP、MySQL、Redis、SSH都可以。工作流程它就像个高级路由器客户端发起一个TCP连接Nginx根据目标端口或IP地址把整个TCP连接转发到后端的某个服务器上。在Nginx中的实现在nginx.conf中使用stream {}块而不是http {}块。stream { upstream redis_cluster { server 192.168.1.10:6379; server 192.168.1.11:6379; } server { listen 6379; proxy_pass redis_cluster; } }作用任何基于TCP/UDP的服务的负载均衡如MySQL、Redis、RabbitMQ、SSH、DNS、RADIUS等。性能更高因为解析的协议头更少转发效率比七层代理高。4. 透明代理 (Transparent Proxy)这个模式是“无感的”。你可以把它看作是正向代理的一种高级形式。工作流程客户端A以为自己直接访问的是服务器B但实际上网络中的路由器或交换机把A的流量“劫持”到了代理服务器C。C处理后再转发给B。A全程都不知道C的存在也无需在浏览器或电脑上配置任何代理。实现方式这通常不单靠Nginx需要结合iptables等防火墙技术将特定的流量如目标端口80重定向到Nginx。作用企业上网审计员工无需任何设置公司就能监控所有网页访问记录。内容缓存运营商或大企业网内部署的透明缓存加速用户下载。总结与选型建议你的需求是…应该选择哪种模式公司内网员工要统一访问外网隐藏身份、突破限制正向代理发布公司官网、API要做Web应用的负载均衡、HTTPS加密反向代理最常用为后端的MySQL、Redis集群做负载均衡不关心HTTP内容四层代理(stream)无差别拦截内网所有HTTP流量用于上网行为监控或缓存加速透明代理需配合iptables理解这四种模式你就能更好地设计或维护你手中的Nginx了。你目前是在规划公司新业务的流量入口还是遇到了某个具体服务比如Web应用或数据库的代理问题告诉我你的场景我可以帮你给出更具体的配置建议。