apache通过反向代理将前端请求(如/api)转发至跨区域后端服务,解决cors与同源限制;需启用mod_proxy、mod_proxy_http等模块,配置proxypass/proxypassreverse,并注意头信息透传与路径一致性。

Apache 代理处理“跨区域”的后端请求,实际是指通过反向代理将前端发来的请求(比如访问 /api)转发到位于不同网络环境、不同服务器或不同地域的后端服务(如 http://10.20.30.40:8080 或 https://api-prod.cn-east.mycompany.com),从而绕过浏览器同源策略限制,也避免前端直连远端地址引发的 CORS 问题。
启用必需的代理模块
Apache 默认不开启代理功能,必须手动加载核心模块:
- 编辑主配置文件
httpd.conf(Windows 下多在 XAMPP/WAMP 的apache/conf/;Linux 多在/etc/apache2/mods-enabled/或用a2enmod) - 取消以下两行前的注释(去掉
#):LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_http_module modules/mod_proxy_http.so - 若需代理 HTTPS 后端或 WebSocket,还建议启用:
LoadModule proxy_ssl_module modules/mod_proxy_ssl.soLoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so - 保存后完整重启 Apache(不是重载),确保模块生效
配置虚拟主机实现路径级代理
在 httpd-vhosts.conf 或站点对应的 <virtualhost></virtualhost> 块中添加规则。例如,把所有 /api 开头的请求代理到华东区后端:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<virtualhost>
ServerName localhost
ProxyRequests Off
<proxy>
Require all granted
</proxy>
ProxyPreserveHost On
ProxyPass /api http://api-prod.cn-east.mycompany.com/api
ProxyPassReverse /api http://api-prod.cn-east.mycompany.com/api
</virtualhost>
关键说明:
-
ProxyPreserveHost On:让后端收到的Host请求头仍是localhost,便于其日志识别和路由判断 -
ProxyPass和ProxyPassReverse必须成对出现,且路径末尾斜杠保持一致(都带或都不带),否则易导致 404 或重定向跳转到原始域名 - 若后端是 HTTPS 地址,
ProxyPass目标写https://...即可,但需确保 Apache 已启用mod_ssl和mod_proxy_ssl
支持带认证凭证的跨区域调用
当后端需要 Cookie、Authorization 或 Session ID 时,需显式传递请求头并处理响应头:
- 添加指令保留关键头信息:
ProxyPreserveHost OnRequestHeader set Origin "http://localhost"(匹配你前端实际协议+域名) - 确保
mod_headers已启用(检查httpd.conf中是否启用了LoadModule headers_module modules/mod_headers.so) - 如需透传客户端真实 IP 给后端(尤其跨区域部署常需审计来源),加:
RequestHeader set X-Real-IP %{REMOTE_ADDR}sRequestHeader set X-Forwarded-For %{REMOTE_ADDR}s
排除特定路径或做条件代理
不是所有请求都要代理。可用 ! 排除,或结合 RewriteRule 做更灵活控制:
- 排除调试路径:
ProxyPass /api/debug !ProxyPass /api http://api-prod.cn-east.mycompany.com/api - 按 Host 或路径前缀区分区域:
RewriteCond %{HTTP_HOST} ^test\.myapp\.com$RewriteRule ^/api/(.*)$ http://api-test.cn-south.mycompany.com/api/$1 [P,L] - 注意:
ProxyPass不应在.htaccess中使用,Apache 官方不推荐,应放在虚拟主机或主配置中










