Apache部署Python应用时,静态资源需由Apache直接托管(如Alias /static),再通过mod_expires和mod_headers精准设置强缓存头(如max-age=31536000、immutable),动态接口则必须禁用缓存(no-cache)。

Apache 部署 Python 应用(如 Flask、Django)时,静态资源(CSS、JS、图片等)默认不带强缓存头,浏览器每次都会发起请求,拖慢页面加载。要真正提升性能,关键不是让整个 Python 应用缓存,而是精准控制其 静态资源路径 的缓存行为——动态接口仍需禁用缓存,静态文件则设长效缓存。
确认静态资源由 Apache 直接服务
这是前提:Python 应用的静态文件(如 /static/ 或 /media/)必须由 Apache 通过 Alias 或 WSGIScriptAlias 外的独立路径托管,不能经由 WSGI 转发。否则 Apache 无法对这些文件应用 mod_expires 规则。
- 典型配置示例(在虚拟主机内):
<Directory "/var/www/myapp/static">
Require all granted
</Directory>
只有这样,后续的缓存指令才能生效。
启用 mod_expires 并按 MIME 类型设过期时间
在同一个 <VirtualHost> 块中,添加以下配置。注意:必须包裹在 <IfModule mod_expires.c> 内,且 ExpiresActive On 不可省略:
立即学习“Python免费学习笔记(深入)”;
<IfModule mod_expires.c>ExpiresActive On
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType image/png "access plus 2 weeks"
ExpiresByType image/jpeg "access plus 2 weeks"
ExpiresByType image/webp "access plus 2 weeks"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresDefault "access plus 1 day"
</IfModule>
使用 access plus X(而非 now plus X),确保每个用户首次访问起算,缓存行为稳定可靠。
仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...
补充 Cache-Control 响应头增强控制力
仅靠 Expires 不够:现代浏览器优先信任 Cache-Control: max-age=。需配合 mod_headers 补充设置:
# 对已知静态路径统一加强缓存
<FilesMatch "\.(css|js|png|jpe?g|webp|woff2|gif|ico|svg)$">
Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>
</IfModule>
immutable 对带哈希名的文件(如 main.a1b2c3.js)特别有用,可防止用户手动刷新(F5)导致缓存失效。
明确禁止动态内容缓存
Python 生成的 HTML、JSON 接口、模板渲染页等,必须禁用缓存,避免用户看到陈旧数据:
<FilesMatch "\.(html|htm|php|json|xml|txt)$">Header set Cache-Control "no-cache, no-store, must-revalidate"
</FilesMatch>
如果你用的是 Django,其 /admin/ 或 Flask 的调试页也属于此类,一并包含在匹配规则中更稳妥。
验证是否真实生效
重启 Apache 后,别只看配置文件是否写对。打开 Chrome DevTools → Network 标签页,刷新页面,点击一个 JS 或 CSS 文件,检查 Response Headers 中是否同时出现:
Expires: [未来某天]Cache-Control: public, max-age=31536000, immutable
两者一致且数值合理,说明配置已起效。若只看到 Cache-Control: no-cache,大概率是路径没匹配上,或被更高优先级的配置覆盖了。


















