proxypass负责请求转发,proxypassreverse负责响应头重写;前者将客户端请求映射至后端服务器路径,后者修正location、set-cookie等响应头中的内网地址为公网地址,避免重定向失败或会话丢失。

ProxyPass 负责把客户端请求“发出去”,ProxyPassReverse 负责把后端响应“改回来”——这是最本质的区别。
ProxyPass:决定请求往哪转
它定义了 URL 路径如何映射到后端服务器。比如:
-
ProxyPass /api/ http://192.168.1.100:8080/ 表示所有以
/api/开头的请求,都会被 Apache 拿掉这个前缀,再转发给后端的http://192.168.1.100:8080/ - 访问
https://example.com/api/users,后端实际收到的是http://192.168.1.100:8080/users - 路径匹配是前缀式、非正则的;如果要正则匹配,得用
ProxyPassMatch
ProxyPassReverse:修正后端返回的跳转和链接
后端服务器在返回 302 重定向或设置 Cookie、Location 头时,通常会写自己的地址(比如内网 IP 或端口)。如果不处理,浏览器就会直接连那个地址,绕过代理,导致失败。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
-
ProxyPassReverse /api/ http://192.168.1.100:8080/ 告诉 Apache:当后端返回
Location: http://192.168.1.100:8080/login时,自动替换成https://example.com/api/login - 同样会改
Content-Location、Set-Cookie中的域名和路径(配合ProxyPassReverseCookieDomain和ProxyPassReverseCookiePath效果更准) - 它不改变请求流向,只改响应头;没有它,很多登录跳转、API 重定向、静态资源引用都会出错
为什么不能只用 ProxyPass?
单独配置 ProxyPass,页面首次加载可能正常,但一旦后端返回重定向、或前端 JS 读取了响应头里的 Location,就容易断链。常见现象包括:
- 登录后跳转到
http://192.168.1.100:8080/dashboard,浏览器打不开 - API 返回 301 重定向,客户端直连内网地址,超时或拒绝连接
- 后端设的 Cookie 域名为
192.168.1.100,浏览器不携带,会话失效
配置要点提醒
两者路径和目标地址需严格一致;顺序不能颠倒;必须启用 mod_proxy 和 mod_proxy_http 模块。建议搭配使用 ProxyPreserveHost On,让后端能拿到原始 Host,便于多域名识别。










