Apache 不运行 Java 应用,而是作为反向代理和静态资源网关,将动态请求转发至 Tomcat 等后端容器,同时直接服务或重写静态资源路径以对接 CDN,并配置缓存头、统一静态路径、确保前端引用 CDN 域名,且 CDN 回源必须指向 Apache 而非 Java 容器。

Apache 本身不运行 Java 应用,而是作为反向代理或静态资源网关,与后端 Java 容器(如 Tomcat、Jetty 或 Spring Boot 内嵌服务器)协同工作。要让 Java Web 应用的静态资源通过 CDN 加速,关键不是在 Apache 里“部署 Java”,而是理清角色分工:Apache 负责动静分离 + 缓存头控制,CDN 负责边缘分发,Java 应用专注业务逻辑。
Apache 的定位:反向代理与静态资源出口
Java 应用通常运行在 8080(Tomcat)或 8081(Spring Boot)等端口,Apache 不托管 class 文件或 servlet,而是:
- 用
mod_proxy_http将动态请求(如/api/、/login)转发给 Java 后端 - 直接响应静态资源请求(如
/static/、/images/),或将其重写为 CDN 域名路径 - 为所有静态响应设置标准缓存头(
Cache-Control、Expires),确保 CDN 和浏览器能正确缓存
静态资源路径需统一对外暴露
Java 应用中的静态文件(如 src/main/resources/static/ 或 src/main/webapp/)不应由 Java 容器直接对外服务。推荐做法是:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 构建时将静态资源(CSS/JS/IMG)单独打包,上传至 CDN 存储空间,或配置 CDN 自动回源到 Apache 的某个本地目录(如
/var/www/static/) - 在 Apache 配置中,将
/static/路径映射到该本地目录,并启用缓存头:
<Location "/static/">
Header set Cache-Control "public, max-age=31536000"
ExpiresActive On
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType image/jpg "access plus 30 days"
</Location>
前端引用必须指向 CDN 域名
Java 应用生成的 HTML 页面(JSP、Thymeleaf、Freemarker 模板)中,所有静态资源链接不能写成 /static/css/app.css,而应替换为 CDN 地址:
立即学习“Java免费学习笔记(深入)”;
- 使用配置项控制:在
application.properties中定义cdn.base-url=https://static.cdn.example.com,模板中通过${cdn.baseUrl}/css/app.css渲染 - 避免硬编码:若用 Nginx/Apache 作网关,也可在响应阶段用
mod_substitute替换 HTML 中的路径(不推荐,增加复杂度) - 注意版本控制:配合文件哈希(如
app.a1b2c3.css)可放心设为 1 年缓存,无需担心更新不生效
CDN 回源必须指向 Apache,而非 Java 容器
CDN 第一次获取资源时需回源拉取。源站地址应设为 Apache 的公网 IP 或域名(如 http://static.example.com),而不是 Tomcat 的 http://localhost:8080。原因包括:
- Apache 可对静态资源做压缩(
mod_deflate)、Gzip/Brotli 编码、防盗链(mod_rewriteReferer 判断)等增强处理 - Java 容器返回的静态资源默认无强缓存头,且可能带 Session Cookie,影响 CDN 缓存命中率
- Apache 的磁盘缓存模块(
mod_cache_disk)可进一步降低源站压力,作为 CDN 和 Java 之间的二级缓存层

















