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

Apache 用 mod_proxy 做反向代理,核心就三步:启用模块、配对写好 ProxyPass 和 ProxyPassReverse、透传关键请求头。它不追求极致并发,但胜在稳定、可控,尤其适合已有 Apache 环境想快速加一层网关的场景。
启用必需模块
mod_proxy 是代理引擎,mod_proxy_http 才能真正转发 HTTP/HTTPS 请求——两者缺一不可。其他模块按需启用:
- Debian/Ubuntu 系统直接运行:sudo a2enmod proxy proxy_http
- RHEL/CentOS 等需编辑 /etc/httpd/conf/httpd.conf 或 /etc/apache2/mods-enabled/proxy.load,取消以下两行注释:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so - 启用后务必执行 sudo apache2ctl configtest(或 sudo httpd -t)验证语法,再重启服务
- 用 apache2ctl -M | grep proxy 确认 proxy_module 和 proxy_http_module 已加载
配置虚拟主机与路径映射
推荐在独立虚拟主机中配置,避免全局污染。关键点是路径斜杠必须严格一致,且 ProxyPass 和 ProxyPassReverse 必须成对出现:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 全站代理示例(注意末尾斜杠):
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/ - 子路径代理(如 /api):
ProxyPass /api/ http://192.168.1.50:3000/
ProxyPassReverse /api/ http://192.168.1.50:3000/ - 不加斜杠会出错:ProxyPass /api http://... 表示把 /api 当前缀截掉,后端收到的是 /xxx;而 ProxyPass /api/ 表示把 /api/ 截掉,后端收到的是 /xxx ——二者行为不同,务必匹配后端实际路由
透传真实 Host 与客户端 IP
只转发请求不够,后端还需知道“用户本来访问的是哪个域名”“真实 IP 是多少”,否则生成跳转链接会暴露内网地址,日志和限流也会失效:
- 加这句让后端拿到原始 Host:ProxyPreserveHost On
- 手动设置 X-Forwarded 头(Apache 默认不自动加):
RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e"
RequestHeader set X-Forwarded-Proto "https"(若前端是 HTTPS) - 后端应用必须主动读取这些头,例如 Java 中用 request.getHeader("X-Forwarded-For") 替代 getRemoteAddr()
安全加固与常见避坑
基础可用不等于生产就绪,几个易忽略但关键的细节:
- 禁用正向代理能力:确保配置里没有 ProxyRequests On,防止被滥用为开放代理
- 限制可代理目标:用 <Proxy> 段白名单控制允许转发的后端地址,例如:
<Proxy http://192.168.1.*> Require ip 192.168.1.0/24 </Proxy> - 后端用内部域名代替 IP:比如写 ProxyPass / http://app-backend/,再在 /etc/hosts 绑定 app-backend → 127.0.0.1,避免 DNS 查询泄露真实 IP
- 若后端返回 302 重定向仍跳内网,一定是 ProxyPassReverse 缺失或路径不匹配,立刻检查

















