Apache反向代理核心三步:启用mod_proxy和mod_proxy_http等必要模块、设置ProxyRequests Off禁用正向代理、成对配置ProxyPass/ProxyPassReverse并严格匹配路径斜杠,缺一不可,否则导致500/503错误或请求不转发。
apache 开启代理模块转发后端请求,核心是三步:启用必要模块、禁用正向代理、配置反向代理规则。缺一不可,否则会出现 500 错误、503 服务不可用或请求根本不转发。
启用 mod_proxy 和 mod_proxy_http 模块
这两个是基础必需模块,缺一不可:
- mod_proxy.so:提供代理框架,没有它 ProxyPass 指令无法识别
- mod_proxy_http.so:处理 HTTP/HTTPS 后端通信,漏掉它会导致 503 或静默失败
- 若后端含 WebSocket(如 Socket.IO),额外启用 mod_proxy_wstunnel.so
- 若后端是 HTTPS,还需 mod_proxy_connect.so 并配
SSLProxyEngine on
操作方式:
- Debian/Ubuntu:
sudo a2enmod proxy proxy_http proxy_wstunnel - RHEL/CentOS:编辑
/etc/httpd/conf.modules.d/00-proxy.conf,取消对应LoadModule行的注释 - Windows/XAMPP:打开
httpd.conf,确保这三行未被#注释:LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_http_module modules/mod_proxy_http.soLoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
验证是否生效:apachectl -M | grep proxy 应输出 proxy_module (shared) 和 proxy_http_module (shared)。
关闭正向代理并放行本地代理请求
生产环境必须禁用正向代理,否则存在安全风险;同时要允许 Apache 自己发起代理请求:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在全局配置或虚拟主机内添加:
ProxyRequests Off - 加上访问控制,只允本机代理(常见于 localhost 后端):
<Proxy *><br> Require all granted<br> </Proxy>
配置 ProxyPass + ProxyPassReverse 映射路径
这是实际转发的核心,必须成对使用,且路径末尾斜杠严格一致:
- 全站代理(后端跑在
localhost:3000):
ProxyPass / http://127.0.0.1:3000/<br> ProxyPassReverse / http://127.0.0.1:3000/
- 子路径代理(如只把
/api/转给:8081):
ProxyPass /api/ http://127.0.0.1:8081/api/<br> ProxyPassReverse /api/ http://127.0.0.1:8081/api/
- 错误示例:
ProxyPass /api http://x:8081/api→ 可能导致/apiuser被错拼为/api/user
透传原始请求信息(避免重定向和 IP 丢失)
否则后端生成的跳转链接会变成 http://127.0.0.1:3000/login,Cookie 域名出错,日志里全是 127.0.0.1:
-
ProxyPreserveHost On:把浏览器发来的 Host 头(如example.com)原样传过去 - 注入标准代理头(放在 VirtualHost 内):
RequestHeader set X-Forwarded-Proto "https" env=HTTPS<br> RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e" early - 如果后端是 Java/Spring Boot/Node.js 等,需主动读取
X-Forwarded-For获取真实客户端 IP
配置完务必执行 apachectl configtest 检查语法,再 systemctl restart apache2(或 httpd)生效。

















