Apache反向代理Spring Boot应用需启用proxy、proxy_http、proxy_connect模块,配置ProxyPass/ProxyPassReverse映射路径,设置ProxyPreserveHost和X-Forwarded头传递真实IP与协议,Spring Boot端需配置forward-headers-strategy为framework以正确解析代理头。

Apache 反向代理转发 Spring Boot 应用,核心是让 Apache 接收外部请求(如 80/443 端口),再把请求安全、准确地转给后端 Spring Boot 实例(比如运行在 8080、8081 等非标准端口),同时确保请求头、重定向 URL 和客户端真实 IP 正确传递。
启用必需的代理模块
Apache 默认不开启代理功能,必须手动加载关键模块。编辑主配置文件 httpd.conf(Linux 路径常为 /etc/httpd/conf/httpd.conf 或 /etc/apache2/apache2.conf;Windows 下为 conf/httpd.conf),确认以下三行已取消注释:
LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_http_module modules/mod_proxy_http.soLoadModule proxy_connect_module modules/mod_proxy_connect.so
若 Spring Boot 使用 WebSocket(如 STOMP)、或上游服务走 HTTPS,还需启用:LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
改完后重启 Apache,并执行 httpd -M | grep proxy(Linux/macOS)或 httpd -M | findstr proxy(Windows)验证模块已加载。
配置虚拟主机与路径映射
推荐将反向代理规则写在独立虚拟主机配置中(如 httpd-vhosts.conf),便于管理。例如,把 monsite.com/applicant-api/ 指向本地 8081 端口的 Spring Boot 应用:
<VirtualHost *:80>
ServerName monsite.com
ProxyPreserveHost On
<pre class='brush:php;toolbar:false;'># /applicant-api/ → http://localhost:8081/
ProxyPass /applicant-api/ http://127.0.0.1:8081/
ProxyPassReverse /applicant-api/ http://127.0.0.1:8081/
# 传递真实客户端 IP
ProxySet remoteip=On
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1
# 可选:添加常用请求头
RequestHeader set X-Forwarded-Proto "http"</VirtualHost>
注意:
• ProxyPass 末尾的 / 必须与后端应用上下文路径一致(Spring Boot 默认无 context-path,所以用 http://127.0.0.1:8081/);
• ProxyPassReverse 保证重定向响应中的 Location 头被正确重写;
• ProxyPreserveHost On 让后端收到原始 Host 头,对 Spring Security 或 CORS 很关键。
Spring Boot 端需配合的关键配置
仅 Apache 配置不够,Spring Boot 必须识别代理传来的头信息,否则可能生成错误的跳转链接或误判协议。在 application.yml 中添加:
server:
forward-headers-strategy: framework
tomcat:
remote-ip-header: x-forwarded-for
protocol-header: x-forwarded-proto其中 server.forward-headers-strategy=framework 是 Spring Boot 2.6+ 推荐方式,自动处理 X-Forwarded-For、X-Forwarded-Proto、X-Forwarded-Prefix 等头,无需手动设置 server.use-forward-headers=true(已废弃)。
若使用较老版本 Spring Boot(
server:
use-forward-headers: true
tomcat:
remote-ip-header: x-forwarded-for
protocol-header: x-forwarded-proto
HTTPS 场景下的补充要点
若前端走 HTTPS(如 Nginx/Apache 终止 SSL),需确保:
- Apache 虚拟主机监听 443 端口,并配置证书;
- 在
ProxyPass前加RequestHeader set X-Forwarded-Proto "https"; - Spring Boot 的
server.forward-headers-strategy会自动识别该头,生成 https:// 开头的重定向链接; - 避免混合内容(HTTP 资源被 HTTPS 页面加载),建议后端接口统一返回相对协议 URL 或由 Spring MVC 自动适配。


















