Apache反向代理核心三步:启用mod_proxy和mod_proxy_http模块、成对配置ProxyPass与ProxyPassReverse(路径斜杠须严格一致)、透传X-Forwarded头及ProxyPreserveHost On以保障后端上下文正确。

Apache 的 mod_proxy 实现基础反向代理,核心就三件事:模块必须启用、路径映射要配对、关键请求头得透传。它不复杂,但每一步漏掉都会导致 500 错误、跳转失效或后端拿不到真实 IP。
启用必需的两个模块
mod_proxy 是代理引擎,mod_proxy_http 才能真正处理 HTTP 请求——两者缺一不可。只开一个,Apache 会报错,日志里常见 Invalid command 'ProxyPass' 或静默 500。
- Debian/Ubuntu 系统直接运行:
sudo a2enmod proxy proxy_http - RHEL/CentOS 系统需编辑
/etc/httpd/conf/httpd.conf或对应模块加载文件,取消这两行注释:LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_http_module modules/mod_proxy_http.so - 启用后务必验证:
sudo apache2ctl configtest(Debian)或sudo httpd -t(RHEL)检查语法
再用apache2ctl -M | grep proxy确认两模块都显示为(shared)
配置路径映射(ProxyPass + ProxyPassReverse)
必须写在 <VirtualHost> 块内,避免污染全局配置。最关键的是斜杠——前后必须严格一致,否则后端路由全乱。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 全站代理(比如把所有请求转给本地 8080 的应用):
ProxyPass / http://127.0.0.1:8080/ProxyPassReverse / http://127.0.0.1:8080/
注意:两个指令末尾都有斜杠,表示“/”被完全截掉,后端收到的是/xxx而不是//xxx - 子路径代理(比如只把
/api/转发):ProxyPass /api/ http://192.168.1.50:3000/ProxyPassReverse /api/ http://192.168.1.50:3000/
如果写成/api(没斜杠),后端收到的路径会多出一层,比如/api/v1变成/v1后还带了个/api前缀,容易 404
让后端知道“用户本来访问的是谁”
只转发请求不够。后端若不知道原始 Host 和客户端 IP,生成的跳转链接会暴露内网地址(如 http://127.0.0.1:8080/login),日志里的 IP 全是 127.0.0.1,限流和白名单也失效。
- 加这句,把浏览器发来的 Host 头原样传过去:
ProxyPreserveHost On - 主动注入真实客户端 IP 和协议:
RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e" env=REDIRECT_REMOTE_ADDRRequestHeader set X-Forwarded-Proto "http" early(HTTPS 站点改成"https") - 别忘了关正向代理,防被滥用:
ProxyRequests Off
重启并确认生效
配置改完,先测试语法,再重启服务:
-
sudo systemctl restart apache2(Debian/Ubuntu)
或sudo systemctl restart httpd(RHEL/CentOS) - 访问域名,看是否正常返回后端内容;
检查响应头里是否有X-Forwarded-For;
登录或跳转操作是否仍走正确域名,而不是内网地址

















