nginx正向代理和TCP和HTTP反向代理
|
admin
2025年12月27日 18:8
本文热度 568
|
正向代理一般是内网用户通过代理上网、隐藏真实的客户端 IP,企业中应用一般为开发网或者办公网通过代理服务器访问指定的外部地址,反向代理一般为用代理接收外部请求并转发,隐藏后端真实服务,作为外部进入的统一入口。一、基本概念
| | | | |
|---|
| 正向代理 | | 客户端 | | |
| 反向代理 | | 服务端 | L7(HTTP/HTTPS)或 L4(TCP/UDP) | 负载均衡、SSL 证书管理、 统一网关等、隐藏后端服务 |
二、Nginx HTTP 正向代理
server { listen 8080; resolver 8.8.8.8; location / { proxy_pass http://$http_host$request_uri; proxy_set_header Host $http_host; }}
❌ 原生不支持 HTTPS(CONNECT 方法),浏览器访问 https://example.com 时会先发 CONNECT example.com:443,开源版 Nginx 无法处理 CONNECT,会返回 400 或 405。
✅ 解决方案:使用第三方模块:ngx_http_proxy_connect_module,编译 Nginx 时加入该模块,即可支持 HTTPS 正向代理。server { listen 8080; resolver 8.8.8.8; location / { proxy_pass http://$http_host; proxy_set_header Host $http_host; } location / { proxy_connect; proxy_connect_allow 443; proxy_connect_connect_timeout 10s; proxy_connect_read_timeout 10s; proxy_connect_send_timeout 10s; }}
三、Nginx TCP 反向代理(四层代理)
使用 stream 模块(Nginx 1.9.0+ 内置),特点:工作在 传输层(L4),不解析应用协议(如 HTTP、MySQL 协议等),可代理任意 TCP(或 UDP)流量。
stream { server { listen 3306; proxy_pass 10.0.0.10:3306; proxy_timeout 1s; } server { listen 6379; proxy_pass backend_redis:6379; } upstream ssh_backend { server 10.0.0.20:22; server 10.0.0.21:22; } server { listen 2222; proxy_pass ssh_backend; }}
适用场景:数据库代理(MySQL、PostgreSQL、Redis)、SSH、RDP、游戏服务器等自定义 TCP 协议
四、 Nginx HTTP 反向代理(七层代理)
这是Nginx 最常用的功能。特点:工作在 应用层(L7),理解 HTTP 协议(可读取 Header、Path、Method 等)支持重写、缓存、限流、鉴权等功能。
http { upstream app_servers { server 10.0.0.100:8080; server 10.0.0.101:8080; } server { listen 80; server_name example.com; location /api/ { proxy_pass http://app_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static/ { alias /var/www/static/; } }}
五、对比总结表
| | | |
|---|
| 配置块 | server { } | stream { } | server { } |
| 工作层级 | | | |
| 是否解析内容 | | | |
| 典型用途 | | | |
| Nginx 原生支持 | | | |
| 能否做负载均衡 | | | |
| 安全性 | | | |
六、如何选择
你想让内网用户通过一个出口访问互联网?→ 正向代理
你想把外部请求转发给内部的 MySQL/Redis/SSH?→ TCP 反向代理(stream)
你部署了多个 Web 应用,需要统一入口、HTTPS、路径路由?→ HTTP 反向代理(http + proxy_pass)
阅读原文:https://mp.weixin.qq.com/s/GE06VNSDNREU9PuMrsUMsA
该文章在 2025/12/27 18:29:07 编辑过