Nginx代理的灵活性源于其动态配置机制:通过变量(如$host、$scheme)解耦协议与域名,支持通配符、/etc/hosts直连、精准请求头透传(Host/X-Forwarded-Proto/X-Real-IP)、location/if/map细粒度路由,以及HTTPS终止、FastCGI/gRPC协议桥接等能力。

HTTP 代理本身不提升灵活性,真正起作用的是 Nginx 的配置方式和运行机制。核心在于把协议、域名、路径、头部等关键要素从硬编码中解耦,让转发逻辑可动态判断、按需响应。
动态协议与域名解析
用 $proxy_pass_scheme://$host 替代固定地址,Nginx 就能根据请求的 host 和预设规则自动选择 HTTP 或 HTTPS,并直接复用 DNS 解析结果或本地 hosts 映射。比如访问 harbor.hillua.cn 时自动走 HTTPS,而 nexus.hillua.cn 仍走 HTTP,无需为每个域名单独写 location 块。
- 配合
/etc/hosts配置,内网请求直接命中局域网 IP,绕过公网解析 - 避免 upstream 中重复定义 server 地址,减少维护成本
- 支持通配符域名(如
*.hillua.cn),新增子域无需改配置
请求头精准透传与适配
代理不是简单转发,而是有意识地重写或补充关键头部,让后端服务感知真实客户端环境。例如:
-
proxy_set_header Host $host:保留原始 Host,避免后端因域名不匹配返回 404 -
proxy_set_header X-Forwarded-Proto $scheme:让后端知道用户是通过 HTTP 还是 HTTPS 访问的 -
proxy_set_header X-Real-IP $remote_addr:传递真实客户端 IP,便于日志分析和限流 - WebSocket 场景下必须设置
Upgrade和Connection头,否则连接会降级为普通 HTTP
按路径与条件分流
借助 location 匹配和 if 判断,可以实现细粒度路由。比如:
-
location /api/转发到后端 API 服务,location /static/直接 serve 静态资源 - 用
if ($args ~* "debug")把调试请求单独打到测试环境 - 结合
map指令将不同 User-Agent 分流到移动端或桌面端后端
多层代理与协议桥接
Nginx 不仅能代理 HTTP,还能作为协议转换枢纽:
- 前端 HTTPS 请求 → Nginx 终止 SSL → 后端 HTTP 通信(减轻后端 TLS 开销)
- HTTP 请求 → Nginx 转发给 FastCGI/Unix socket 的 PHP-FPM
- HTTP 请求 → Nginx 转发给 gRPC 后端(需 stream 模块 + 协议适配)
- 同一端口同时支持 HTTP 和 WebSocket,靠 Upgrade 头自动识别并切换处理链路


















