nginx 应分层缓存:静态资源直供并设强浏览器缓存(如 expires 1y),api 接口按需启用 proxy_cache(需后端返回合理 cache-control),避免缓存动态页面或带 cookie 内容。

Python 应用(如 Flask、FastAPI、Gradio)本身不直接服务静态资源,通常由 Nginx 承担静态文件分发和缓存加速职责。代理缓存加速的关键不是缓存 Python 动态响应本身(除非明确需要),而是把 前端构建产物(HTML/JS/CSS/图片)和 API 响应中可缓存的部分 分层处理:静态资源走强缓存,动态接口按需缓存。
静态资源直供 + 强浏览器缓存
这是最常用、最高效的方式。Nginx 不代理请求到 Python 后端,而是直接读取构建好的 dist 或 static 目录:
- 确保 Python 服务只暴露 API 路径(如
/api/、/v1/),前端页面由 Nginx 独立托管 - 在 server 块中配置 location 匹配静态路径,例如:
location / { root /var/www/myapp/dist; index index.html; } - 添加缓存头,让浏览器长期缓存不变资源:
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
对 Python API 响应做代理级缓存(谨慎使用)
仅适用于读多写少、数据更新频率低的接口(如配置信息、公告、商品详情页等)。需后端配合返回合理缓存头(如 Cache-Control: public, max-age=300):
- 启用 proxy_cache 模块并定义缓存区:
proxy_cache_path /var/cache/nginx/api_cache levels=1:2 keys_zone=api_cache:10m inactive=10m; - 在 location 中启用缓存:
location /api/config/ {
proxy_cache api_cache;
proxy_cache_valid 200 5m;
proxy_pass http://python_backend;
} - 注意:POST/PUT/DELETE 请求默认不缓存;需显式配置
proxy_cache_methods GET HEAD
避免缓存混淆的两个关键点
Nginx 缓存行为高度依赖响应头,后端不设缓存策略,Nginx 就不会缓存:
-
不要依赖 Nginx 默认缓存:它对 200 响应默认不缓存,除非你写了
proxy_cache_valid - 动态页面(如 Jinja2 渲染的 HTML)慎用 proxy_cache:用户登录态、实时数据容易出错;更适合用 ESI 或客户端局部刷新
- 若必须缓存带 Cookie 的页面,需加
proxy_ignore_headers Cache-Control;并手动控制,但风险高,不推荐
验证缓存是否生效
通过响应头判断:
- 浏览器开发者工具 → Network → 查看某个 JS 或 API 请求的 Response Headers:
出现X-Proxy-Cache: HIT(或MISS/BYPASS)说明 Nginx 缓存已介入 - 检查
Age头是否大于 0,表示该响应来自缓存而非源站 - 用 curl 测试:
curl -I https://yourdomain.com/static/main.js
curl -I https://yourdomain.com/api/config
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











