apache实现动静分离的核心是用mod_proxy和mod_proxy_http模块将静态请求(如css、js、图片)由本地直出,动态请求(如/api、.php)代理至后端服务器;需启用proxy、proxy_http、alias、rewrite模块,并配置alias挂载静态目录、proxypass/proxypassreverse转发动态路径。

Apache 代理实现动静分离,核心是让 Apache 直接响应静态请求(如 CSS、JS、图片),而把动态请求(如 /api、/admin、.php)转发给后端应用服务器(如 Tomcat、Node.js、PHP-FPM 或 Spring Boot)。这不是靠多个域名硬拆分,而是基于路径或文件类型智能分流。
启用关键模块
必须启用以下模块,缺一不可:
- mod_proxy:提供代理基础功能
- mod_proxy_http:支持 HTTP 协议代理(最常用)
- mod_rewrite(可选但推荐):用于更灵活的条件判断,比如按后缀分流
- mod_alias(推荐):用于映射本地静态目录
在 Ubuntu/Debian 上执行:
sudo a2enmod proxy proxy_http alias rewrite
sudo systemctl restart apache2
配置静态资源直出
把静态文件放在本地目录(如 /var/www/static),然后通过 Alias 指令挂载到 URL 路径(如 /static):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
Require all granted
Options -Indexes
Alias /static /var/www/static
这样访问 https://example.com/static/logo.png 就由 Apache 直接读取并返回,不经过后端。
配置动态请求代理
用 ProxyPass 和 ProxyPassReverse 把特定路径转发给后端服务。常见写法:
- 转发所有非静态路径:ProxyPass / !(先排除静态路径),再 ProxyPass / http://127.0.0.1:8080/
- 按前缀转发:ProxyPass /api http://127.0.0.1:3000/api
- 按后缀转发(配合 mod_rewrite):RewriteRule \.(php|jsp|do)$ http://127.0.0.1:8080%{REQUEST_URI} [P]
ProxyPassReverse 必须同步配置,确保后端返回的重定向头(如 Location)被正确重写,避免跳转到内网地址。
注意缓存与安全细节
动静分离不只是转发,还要兼顾性能和安全:
- 为静态资源开启强缓存:ExpiresActive On + ExpiresByType image/jpeg "access plus 1 year"
- 禁止执行静态目录下的脚本:
Require all denied - 后端服务建议监听 127.0.0.1(而非 0.0.0.0),防止外部直连
- 若用 HTTPS,需在 ProxyPassReverse 中使用 https:// 地址,并确保后端能正确识别协议头(加 RequestHeader set X-Forwarded-Proto "https")










