apache反向代理配置核心三步:启用proxy、proxy_http等必要模块,按域名或路径编写proxypass规则,重启服务并验证;关键在于转发准确、稳定且无遗漏。

Apache 反向代理配置核心就三步:启用模块、写好规则、重启生效。关键不是“能不能转”,而是“转得对不对、稳不稳、有没有漏”。
必须启用的模块
Apache 默认不开启代理功能,以下模块缺一不可:
-
mod_proxy(代理主引擎) -
mod_proxy_http(支持 HTTP/HTTPS 后端通信) -
mod_proxy_connect(如需 CONNECT 方法,比如某些 HTTPS 透传场景) -
mod_proxy_wstunnel(后端用 WebSocket,比如 Socket.IO、Vue DevServer)
Linux(Debian/Ubuntu)执行:
sudo a2enmod proxy proxy_http proxy_connect proxy_wstunnel sudo systemctl restart apache2
CentOS/RHEL 检查 /etc/httpd/conf.modules.d/00-proxy.conf,确保对应 LoadModule 行未被注释。验证是否加载成功:
httpd -M | grep proxy
输出应含 proxy_module (shared) 和 proxy_http_module (shared)。
按域名或路径分发请求
推荐统一写在 httpd-vhosts.conf(或 /etc/apache2/sites-available/ 下的独立站点配置),避免污染主配置。
✅ 域名级代理(推荐)——不同域名指向不同服务:
<virtualhost>
ServerName api.example.com
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
</virtualhost><virtualhost>
ServerName admin.example.com
ProxyPreserveHost On
ProxyPass / http://192.168.1.100:8080/
ProxyPassReverse / http://192.168.1.100:8080/
</virtualhost>
⚠️ 注意:ProxyPass 和 ProxyPassReverse 的路径结尾斜杠必须严格一致(都带 / 或都不带),否则重定向、静态资源路径会出错。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
✅ 路径级代理(单域名多服务)——同一域名下按前缀区分:
<virtualhost>
ServerName example.com
ProxyPreserveHost On
ProxyPass /node/ http://localhost:3000/
ProxyPassReverse /node/ http://localhost:3000/
ProxyPass /go/ http://localhost:8080/
ProxyPassReverse /go/ http://localhost:8080/
ProxyPass /java/ http://localhost:8081/
ProxyPassReverse /java/ http://localhost:8081/
</virtualhost>
别忽略的细节
-
ProxyPreserveHost On:让后端收到原始Host头,避免生成http://localhost:3000这类错误跳转链接 -
ProxyRequests Off:务必关闭正向代理,防止你的 Apache 被滥用为开放代理 - 客户端真实 IP 透传(后端日志/限流需要):
RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e" RequestHeader set X-Forwarded-Proto "http"若前端是 HTTPS(比如用 Let’s Encrypt 终结 SSL),把
http改成https - WebSocket 支持(Node.js/Go 常见):
ProxyPass /socket.io/ ws://localhost:3000/socket.io/ ProxyPassReverse /socket.io/ ws://localhost:3000/socket.io/
配置保存后,执行:
sudo apachectl configtest # 先检查语法 sudo systemctl restart apache2
然后访问对应域名或路径,观察是否返回后端响应,再查 Apache 错误日志(/var/log/apache2/error.log 或 /var/log/httpd/error_log)定位问题。
不复杂但容易忽略。










