proxypass 是 apache mod_proxy 模块提供的反向代理指令,用于将客户端对指定路径的请求透明转发至后端服务器(如 tomcat、node.js),并原样返回响应;需启用 mod_proxy、mod_proxy_http 等模块,配合 proxypassreverse 和 proxypreservehost 实现正确路径重写与 host 头传递。
proxypass 是 apache 的 mod_proxy 模块提供的指令,用于实现基础反向代理——即把客户端对某个路径的请求,透明转发到后端另一个服务器(如 tomcat、node.js 或其他 web 服务),再将响应原样返回给客户端。
启用必要模块
确保以下模块已启用(通常在 httpd.conf 或 apache2.conf 中取消注释):
mod_proxy-
mod_proxy_http(处理 HTTP/HTTPS 后端) - 如需 WebSocket 支持,还需
mod_proxy_wstunnel
在 Debian/Ubuntu 系统中可用命令启用:a2enmod proxy proxy_http,然后重启 Apache。
最简 ProxyPass 配置示例
假设你希望把访问 https://example.com/api/ 的所有请求,转发到本地运行的 Tomcat(监听 http://127.0.0.1:8080/):
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
<virtualhost><br> ServerName example.com<br> SSLEngine on<br> # ... SSL 配置省略<br><br> ProxyPreserveHost On<br> ProxyPass /api/ http://127.0.0.1:8080/<br> ProxyPassReverse /api/ http://127.0.0.1:8080/<br></virtualhost>
说明:
-
ProxyPass /api/ http://127.0.0.1:8080/:匹配以/api/开头的请求,转发到后端根路径 -
ProxyPassReverse /api/ http://127.0.0.1:8080/:重写后端响应中的Location、Set-Cookie等 Header,避免跳转或 Cookie 路径出错 -
ProxyPreserveHost On:让后端收到的Host头仍是example.com,而非127.0.0.1:8080,便于后端识别域名
常见注意事项
配置时容易忽略但影响实际运行的关键点:
- 路径结尾斜杠必须一致:若后端是
http://localhost:8080/app/,则ProxyPass /api/ http://localhost:8080/app/才能正确映射;多一个或少一个/可能导致 404 或路径错位 - 默认不转发 HTTPS 请求头(如
X-Forwarded-For),建议补充:ProxyAddHeaders OnRequestHeader set X-Forwarded-Proto "https" env=HTTPS - 若后端要求真实客户端 IP,需确保前端 Apache 正确设置了
X-Forwarded-For,且后端应用信任该 Header - 防火墙或 SELinux 可能阻止 Apache 发起 outbound 连接,调试时可临时关闭验证是否为此类问题
验证与排错
配置完成后执行:
-
apachectl configtest或apache2ctl configtest检查语法 - 重启服务:
systemctl restart apache2(Debian)或systemctl restart httpd(RHEL/CentOS) - 用
curl -v https://example.com/api/test观察响应来源和 Header 是否符合预期 - 查看 Apache 错误日志(
error.log)中是否有proxy:相关报错,例如连接被拒绝、超时、DNS 解析失败等










