系列导读:本篇将深入讲解 Nginx 反向代理的高级配置,包括 proxy_pass 详解、请求头处理、WebSocket 代理、文件上传等核心技能。
### 文章目录
- [@[Toc]](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [前言:反向代理的核心价值](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [一、proxy_pass 深度解析](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [1.1 基础语法](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [1.2 URL 尾部斜杠的影响](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [1.3 变量动态代理](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [1.4 使用 map 动态代理](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [二、请求头处理最佳实践](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [2.1 核心请求头配置](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [2.2 Tomcat 端获取真实 IP](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [2.3 自定义请求头](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [2.4 过滤敏感请求头](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [三、WebSocket 代理配置](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [3.1 WebSocket 基础配置](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [3.2 WebSocket + HTTP 混合配置](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [3.3 STOMP 协议支持(Spring WebSocket)](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [四、文件上传与下载优化](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [4.1 文件上传配置](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [4.2 Tomcat 文件上传配置](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [4.3 文件下载优化](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [4.4 大文件分片上传支持](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [五、超时与重试策略](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [5.1 超时配置详解](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [5.2 故障重试配置](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [5.3 熔断降级配置](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [六、实战案例:完整配置模板](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [6.1 生产级反向代理配置](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [6.2 多应用配置](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
- [总结](#文章目录 @[Toc] 前言:反向代理的核心价值 一、proxy_pass 深度解析 1.1 基础语法 1.2 URL 尾部斜杠的影响 1.3 变量动态代理 1.4 使用 map 动态代理 二、请求头处理最佳实践 2.1 核心请求头配置 2.2 Tomcat 端获取真实 IP 2.3 自定义请求头 2.4 过滤敏感请求头 三、WebSocket 代理配置 3.1 WebSocket 基础配置 3.2 WebSocket + HTTP 混合配置 3.3 STOMP 协议支持(Spring WebSocket) 四、文件上传与下载优化 4.1 文件上传配置 4.2 Tomcat 文件上传配置 4.3 文件下载优化 4.4 大文件分片上传支持 五、超时与重试策略 5.1 超时配置详解 5.2 故障重试配置 5.3 熔断降级配置 六、实战案例:完整配置模板 6.1 生产级反向代理配置 6.2 多应用配置 总结)
前言:反向代理的核心价值
在 Nginx + Tomcat 架构中,Nginx 作为反向代理承担着关键角色:
┌─────────────────────────────────────────────────────────────┐
│ 反向代理的核心职责 │
├─────────────────────────────────────────────────────────────┤
│ 🔀 请求分发 → 根据规则将请求转发到后端 Tomcat │
│ 📝 请求头处理 → 添加/修改/删除请求头信息 │
│ 🔒 安全隔离 → 隐藏后端架构,保护 Tomcat │
│ ⚡ 性能优化 → 连接池、缓冲、压缩 │
│ 🛡️ 故障容错 → 超时重试、故障转移 │
└─────────────────────────────────────────────────────────────┘
一、proxy_pass 深度解析
1.1 基础语法
nginx
proxy_pass URL;
URL 格式:
http://host:porthttp://upstream_namehttp://host:port/uri
1.2 URL 尾部斜杠的影响
这是最容易出错的地方,务必理解:
nginx
# ==================== 情况一:proxy_pass 带 URI(有斜杠)====================
location /api/ {
proxy_pass http://tomcat:8080/v1/;
# 请求 /api/users → 转发 /v1/users
# /api/ 被替换为 /v1/
}
# ==================== 情况二:proxy_pass 带 URI(无尾部斜杠)====================
location /api/ {
proxy_pass http://tomcat:8080/v1;
# 请求 /api/users → 转发 /v1users(注意!直接拼接)
# 这通常不是期望的行为
}
# ==================== 情况三:proxy_pass 不带 URI ====================
location /api/ {
proxy_pass http://tomcat:8080;
# 请求 /api/users → 转发 /api/users
# 完整传递原路径
}
# ==================== 情况四:location 无尾部斜杠 ====================
location /api {
proxy_pass http://tomcat:8080/;
# 请求 /api/users → 转发 /users
# /api 被替换为空
}
最佳实践:
nginx
# ✅ 推荐:保持一致性
location /app/ {
proxy_pass http://tomcat:8080/app/; # 两边都有斜杠
}
# ✅ 推荐:使用 upstream
upstream tomcat_cluster {
server 127.0.0.1:8080;
}
location /app/ {
proxy_pass http://tomcat_cluster/app/;
}
1.3 变量动态代理
nginx
# 根据请求路径动态选择后端
upstream tomcat_v1 {
server 127.0.0.1:8081;
}
upstream tomcat_v2 {
server 127.0.0.1:8082;
}
server {
location ~ ^/v(\d+)/(.*)$ {
set $version $1;
set $path $2;
if ($version = "1") {
proxy_pass http://tomcat_v1/$path;
}
if ($version = "2") {
proxy_pass http://tomcat_v2/$path;
}
}
}
1.4 使用 map 动态代理
nginx
# 根据请求头动态选择后端
map $http_x_api_version $backend {
default tomcat_v1;
"v2" tomcat_v2;
"v3" tomcat_v3;
}
upstream tomcat_v1 { server 127.0.0.1:8081; }
upstream tomcat_v2 { server 127.0.0.1:8082; }
upstream tomcat_v3 { server 127.0.0.1:8083; }
server {
location /api/ {
proxy_pass http://$backend;
}
}
二、请求头处理最佳实践
2.1 核心请求头配置
nginx
location / {
proxy_pass http://tomcat_backend;
# ==================== 必需的请求头 ====================
# 原始 Host 头
proxy_set_header Host $host;
# 客户端真实 IP
proxy_set_header X-Real-IP $remote_addr;
# 代理链 IP 列表
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 原始协议(http/https)
proxy_set_header X-Forwarded-Proto $scheme;
# 原始主机名和端口
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
2.2 Tomcat 端获取真实 IP
方式一:使用 RemoteIpValve(推荐)
xml
<!-- Tomcat server.xml -->
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
proxiesHeader="X-Forwarded-By"
protocolHeader="X-Forwarded-Proto"
internalProxies="127\.0\.0\.1|10\.\d{1,3}\.\d{1,3}\.\d{1,3}"
trustedProxies="127\.0\.0\.1" />
方式二:Java 代码获取
java
public class RequestUtil {
public static String getRealIp(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Real-IP");
}
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
// 多级代理时取第一个 IP
if (ip != null && ip.contains(",")) {
ip = ip.split(",")[0].trim();
}
return ip;
}
}
2.3 自定义请求头
nginx
location / {
proxy_pass http://tomcat_backend;
# 添加自定义请求头
proxy_set_header X-Server-Time $time_iso8601;
proxy_set_header X-Request-ID $request_id;
proxy_set_header X-Client-Country $geoip_country_code;
# 传递原始请求体大小
proxy_set_header Content-Length $content_length;
}
2.4 过滤敏感请求头
nginx
location / {
proxy_pass http://tomcat_backend;
# 清除敏感请求头
proxy_set_header Authorization "";
proxy_set_header Cookie "";
# 或使用 proxy_hide_header 隐藏响应头
proxy_hide_header X-Powered-By;
proxy_hide_header Server;
}
三、WebSocket 代理配置
3.1 WebSocket 基础配置
nginx
# WebSocket 升级映射
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket_backend {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name ws.example.com;
location /ws/ {
proxy_pass http://websocket_backend;
# WebSocket 必需配置
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# 长连接超时(WebSocket 需要较长超时)
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
# 禁用缓冲(实时通信)
proxy_buffering off;
}
}
3.2 WebSocket + HTTP 混合配置
nginx
map $http_upgrade $connection_upgrade {
default upgrade;
'' "";
}
server {
listen 80;
server_name app.example.com;
# WebSocket 端点
location /ws/ {
proxy_pass http://tomcat_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 3600s;
proxy_buffering off;
}
# 普通 HTTP 请求
location / {
proxy_pass http://tomcat_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3.3 STOMP 协议支持(Spring WebSocket)
nginx
location /stomp/ {
proxy_pass http://tomcat_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
# STOMP 心跳超时
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
# 允许跨域
proxy_set_header Origin $http_origin;
}
四、文件上传与下载优化
4.1 文件上传配置
nginx
server {
listen 80;
server_name upload.example.com;
# 文件上传端点
location /upload {
proxy_pass http://tomcat_backend;
# ==================== 上传大小限制 ====================
client_max_body_size 100m; # 最大上传大小
client_body_buffer_size 128k; # 缓冲区大小
# ==================== 超时配置 ====================
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
# ==================== 请求体处理 ====================
proxy_request_buffering off; # 大文件建议关闭缓冲
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 临时文件存储路径
client_body_temp_path /var/nginx/client_body_temp;
}
4.2 Tomcat 文件上传配置
xml
<!-- Tomcat server.xml -->
<Connector port="8080"
maxPostSize="104857600" <!-- 100MB -->
maxSwallowSize="-1" <!-- 不限制吞掉的数据 -->
... />
xml
<!-- web.xml -->
<multipart-config>
<max-file-size>104857600</max-file-size> <!-- 单文件最大 100MB -->
<max-request-size>209715200</max-request-size> <!-- 总请求最大 200MB -->
<file-size-threshold>0</file-size-threshold> <!-- 超过阈值写入临时文件 -->
</multipart-config>
4.3 文件下载优化
nginx
location /download {
proxy_pass http://tomcat_backend;
# ==================== 下载优化 ====================
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 32k;
proxy_busy_buffers_size 64k;
# 限速(可选,防止带宽被占满)
limit_rate 1m; # 限制下载速度 1MB/s
# 超时配置
proxy_read_timeout 600s;
}
4.4 大文件分片上传支持
nginx
# 分片上传端点
location /upload/chunk {
proxy_pass http://tomcat_backend;
client_max_body_size 10m; # 单个分片大小
proxy_request_buffering off;
proxy_set_header X-Chunk-Index $http_x_chunk_index;
proxy_set_header X-Chunk-Total $http_x_chunk_total;
proxy_set_header X-File-Id $http_x_file_id;
}
五、超时与重试策略
5.1 超时配置详解
nginx
location / {
proxy_pass http://tomcat_backend;
# ==================== 连接超时 ====================
# 与 Tomcat 建立连接的超时时间
proxy_connect_timeout 30s;
# ==================== 发送超时 ====================
# 发送请求到 Tomcat 的超时时间
proxy_send_timeout 60s;
# ==================== 读取超时 ====================
# 读取 Tomcat 响应的超时时间
proxy_read_timeout 60s;
# ==================== Keepalive 超时 ====================
keepalive_timeout 65s;
}
不同场景的超时建议:
| 场景 | connect_timeout | send_timeout | read_timeout |
|---|---|---|---|
| 普通 API | 10s | 30s | 30s |
| 文件上传 | 60s | 300s | 300s |
| 长轮询 | 10s | 60s | 300s |
| WebSocket | 10s | 3600s | 3600s |
| 报表导出 | 30s | 120s | 180s |
5.2 故障重试配置
nginx
upstream tomcat_backend {
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8081 max_fails=3 fail_timeout=30s;
keepalive 32;
}
server {
location / {
proxy_pass http://tomcat_backend;
# ==================== 故障重试 ====================
# 什么情况下重试
proxy_next_upstream
error # 连接错误
timeout # 超时
invalid_header # 无效响应头
http_500 # 500 错误
http_502 # 502 错误
http_503 # 503 错误
http_504; # 504 错误
# 最大重试次数
proxy_next_upstream_tries 3;
# 重试超时时间
proxy_next_upstream_timeout 30s;
}
}
5.3 熔断降级配置
nginx
# 定义熔断条件
map $upstream_status $circuit_breaker {
default 0;
~^5 1; # 5xx 错误触发熔断
}
server {
location /api/ {
proxy_pass http://tomcat_backend;
# 熔断后返回降级响应
proxy_intercept_errors on;
error_page 500 502 503 504 = @fallback;
}
location @fallback {
default_type application/json;
return 503 '{"code": 503, "message": "Service temporarily unavailable"}';
}
}
六、实战案例:完整配置模板
6.1 生产级反向代理配置
nginx
# /etc/nginx/conf.d/tomcat-production.conf
# ==================== Upstream 定义 ====================
upstream tomcat_backend {
least_conn;
server 127.0.0.1:8080 weight=5 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8081 weight=3 max_fails=3 fail_timeout=30s;
keepalive 32;
keepalive_timeout 60s;
keepalive_requests 1000;
}
# WebSocket 升级映射
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# ==================== HTTP 服务器 ====================
server {
listen 80;
server_name app.example.com;
# 强制 HTTPS
return 301 https://$server_name$request_uri;
}
# ==================== HTTPS 服务器 ====================
server {
listen 443 ssl http2;
server_name app.example.com;
# SSL 配置
ssl_certificate /etc/nginx/ssl/app.example.com.crt;
ssl_certificate_key /etc/nginx/ssl/app.example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 日志配置
access_log /var/log/nginx/app.access.log;
error_log /var/log/nginx/app.error.log;
# 根目录(静态资源)
root /opt/tomcat/current/webapps/ROOT;
# ==================== 静态资源(Nginx 处理)====================
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
# ==================== WebSocket 端点 ====================
location /ws/ {
proxy_pass http://tomcat_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 3600s;
proxy_buffering off;
}
# ==================== 文件上传 ====================
location /api/upload {
proxy_pass http://tomcat_backend;
client_max_body_size 100m;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_request_buffering off;
}
# ==================== API 请求 ====================
location /api/ {
proxy_pass http://tomcat_backend;
# 请求头
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时
proxy_connect_timeout 10s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
# 重试
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
proxy_next_upstream_tries 3;
}
# ==================== 默认转发 ====================
location / {
proxy_pass http://tomcat_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# ==================== 健康检查 ====================
location /health {
access_log off;
return 200 "OK\n";
add_header Content-Type text/plain;
}
}
6.2 多应用配置
nginx
# 不同应用转发到不同 Tomcat
upstream app1_backend {
server 127.0.0.1:8080;
}
upstream app2_backend {
server 127.0.0.1:8081;
}
server {
listen 80;
server_name app1.example.com;
location / {
proxy_pass http://app1_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name app2.example.com;
location / {
proxy_pass http://app2_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
总结
本文深入讲解了 Nginx 反向代理的高级配置:
✅ proxy_pass 详解 :URL 斜杠影响、动态代理、变量使用
✅ 请求头处理 :真实 IP 传递、自定义请求头、敏感信息过滤
✅ WebSocket 代理 :升级配置、混合部署、STOMP 支持
✅ 文件上传下载 :大小限制、超时配置、分片上传
✅ 超时重试策略 :超时配置、故障重试、熔断降级
✅ 生产级配置:完整模板、多应用部署
核心配置速查表:
| 配置项 | 说明 | 推荐值 |
|---|---|---|
proxy_connect_timeout |
连接超时 | 10-30s |
proxy_read_timeout |
读取超时 | 30-60s |
client_max_body_size |
最大请求体 | 10-100m |
proxy_buffering |
响应缓冲 | on |
keepalive |
连接池 | 32 |
下一篇预告 :(Nginx + Tomcat 整合实战(三):负载均衡与集群部署),将深入讲解多 Tomcat 负载均衡、会话共享、高可用架构等核心技能。
作者 :刘~浪地球
系列 :Nginx + Tomcat 整合实战(二)
更新时间:2026-03-30