Apache基础反向代理核心三步:启用mod_proxy和mod_proxy_http模块、成对配置ProxyPass/ProxyPassReverse、设置ProxyPreserveHost及X-Forwarded-*头并确保后端解析;缺一不可,否则导致500错误、重定向暴露内网地址或获取不到真实客户端IP。

Apache 配置基础反向代理,核心就三步:启用模块、写转发规则、确保响应头正确重写。不复杂,但漏掉任意一环都可能让请求失败或跳转出错。
必须启用的两个代理模块
Apache 默认关闭所有代理功能,光写 ProxyPass 指令会直接报错(500 或 “Invalid command”)。需确认以下模块已加载:
- mod_proxy:代理引擎主模块,没它整个代理机制无法启动
- mod_proxy_http:专用于 HTTP/HTTPS 后端通信,Node.js、Spring Boot、PHP-FPM 等都靠它转发
Linux/macOS 下检查命令:httpd -M | grep proxy;Windows 用 httpd -M | findstr proxy。若未看到 proxy_module (shared) 和 proxy_http_module (shared),需在 httpd.conf 中取消这两行注释:
LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyPass 和 ProxyPassReverse 必须成对出现
只配 ProxyPass 是常见错误——后端返回 302 重定向时,Location 头里会暴露 http://127.0.0.1:8080/login 这类内网地址,用户点击就 404。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
正确写法(以本地 Tomcat 为例):
<VirtualHost *:80>ServerName app.example.com
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
- ProxyPreserveHost On:把原始 Host 头(如 app.example.com)透传给后端,避免生成错误绝对 URL
- 前后斜杠必须一致:ProxyPass /api/ → 后端地址也得是 /api/,否则路径拼接错乱(比如 /api/v1 变成 /api//v1)
让后端拿到真实客户端 IP
Apache 单加 X-Forwarded-For 头不够,Java/Spring Boot 默认仍读到 127.0.0.1。需要两端配合:
- Apache 端添加三行头(放在 VirtualHost 内):
RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e" earlyRequestHeader set X-Forwarded-Proto "http" env=!HTTPSRequestHeader set X-Forwarded-Proto "https" env=HTTPS - 后端必须解析这些头:Spring Boot 推荐配置
server.forward-headers-strategy=framework;Node.js 需启用trust proxy;PHP 用$_SERVER['HTTP_X_FORWARDED_FOR']替代REMOTE_ADDR
验证与重启
改完配置后,先语法检查:apachectl configtest(或 httpd -t),输出 Syntax OK 才可重启:systemctl restart apache2(Debian/Ubuntu)或 systemctl restart httpd(RHEL/CentOS)。
访问域名,抓包看响应头是否含 Location: https://app.example.com/xxx(而非内网地址),再查后端日志是否记录的是真实公网 IP——这两点都满足,基础反向代理就算跑通了。

















