nginx 为 python 应用做动静分离的核心是让其直接响应静态资源(css/js/图片等),而将动态请求(如 /api/、/login)交由 python 后端处理,以降低 i/o 压力、提升并发与响应速度。

在 Nginx 中为 Python 应用(如 Flask、Django 或 FastAPI)做动静分离,核心是让 Nginx 直接响应静态资源(CSS/JS/图片等),而将动态请求(如 API 接口、页面渲染)交由 Python 后端处理。这样能显著降低 Python 进程的 I/O 压力,提升并发能力与响应速度。
明确动静资源边界
静态资源指无需 Python 解释执行、可直接读取返回的文件,包括:
- CSS、JavaScript、HTML 模板(若不需服务端渲染)
- 图片(.png、.jpg、.gif、.webp)、字体(.woff2、.ttf)、图标(.svg、.ico)
- 前端构建产物(如 Vue/React 打包后的 dist 目录)
动态请求则包含所有需业务逻辑处理的路径,例如:/api/、/login、/admin,或 Django 的 /accounts/ 等。
配置 Nginx 分发规则
在 server 块中按优先级设置 location 匹配,推荐使用「后缀匹配 + 目录前缀」双保险方式:
- 用 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2|ttf|eot)$ 捕获常见静态文件类型,配合 root 或 alias 指向实际存放路径(如
/var/www/myapp/static/) - 用 location /static/ 或 location /media/ 显式映射 Django/Flask 的静态资源 URL 前缀,避免后端重复处理
- 其余请求统一交给 Python 服务,例如通过 proxy_pass http://127.0.0.1:8000(对应 Gunicorn/Uvicorn 监听地址)
注意:location /static/ 用 alias 更安全(结尾斜杠需一致),而 location ~* \.js$ 类型必须用 root,否则路径拼接易出错。
优化静态资源交付效率
仅分离还不够,要真正提效,需叠加缓存与压缩:
- 添加 expires 1y 和 add_header Cache-Control "public, immutable",让浏览器长期缓存不变资源
- 启用 gzip on 并配置 gzip_types,对文本类静态资源自动压缩传输
- 若部署在生产环境,建议把静态资源提前收集到独立目录(如 Django 的
python manage.py collectstatic),避免运行时查找开销
Python 后端配合要点
后端需“配合”分离策略,避免干扰:
- 关闭 Python 框架自带的静态文件服务(如 Flask 的
app.run(debug=True)默认开启,生产务必禁用;Django 的DEBUG=True下才提供 static 服务,上线必须关) - 确保模板中引用的静态路径与 Nginx 配置的 URL 前缀一致(如
{{ url_for('static', filename='css/app.css') }}对应location /static/) - 上传的用户文件(如头像、附件)建议单独配置 location /media/ 并指向上传目录,不经过 Python 处理
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











