Nginx 直接服务静态文件是性能优化关键,需用 location 正确匹配(后缀匹配用 root,路径匹配用 alias),配置长期缓存与 Gzip 压缩,并禁用 Python 框架的静态服务。

直接让 Nginx 承担静态文件服务,不经过 Python 进程,是优化性能最有效的一环。关键不是“能不能发”,而是“怎么发得快、稳、省资源”。
明确哪些该由 Nginx 直接响应
静态文件指无需业务逻辑处理、内容固定、可长期复用的资源,包括:
- CSS、JS、HTML(纯前端模板,非服务端渲染)
- 图片(.png、.jpg、.webp、.gif)、图标(.ico、.svg)
- 字体(.woff2、.ttf、.eot)和前端构建产物(如 dist/ 下所有文件)
- 用户上传但已归档的媒体文件(如 /media/avatar/ 下头像,需单独配置)
动态路径如 /api/、/login、/admin 或 Django 的 /accounts/ 必须交由 Python 后端,Nginx 不参与处理逻辑。
用对 location 规则,避免路径拼错
匹配方式决定文件能否被准确定位。两类常用写法不能混用:
立即学习“Python免费学习笔记(深入)”;
-
后缀匹配(推荐用于通用类型):
location ~* \.(js|css|png|jpg|webp|woff2)$必须配合 root 指令,例如root /var/www/myapp/dist;,Nginx 自动拼接完整路径 -
前缀匹配(推荐用于框架约定路径):
location /static/或location /media/应使用 alias,且结尾斜杠必须一致,例如alias /var/www/static_files/;(注意末尾斜杠)
错误示例:location /static/ { root /var/www/static_files; } 会导致实际查找路径变成 /var/www/static_files/static/xxx.css,404 风险高。
强制浏览器缓存 + 启用传输压缩
减少重复请求和带宽占用,比单纯加快单次响应更有效:
- 添加长期缓存头:
expires 1y;和add_header Cache-Control "public, immutable";适用于哈希命名的资源(如app.a1b2c3.js),内容变更即文件名变,浏览器可放心缓存一年 - 启用 Gzip 压缩:
gzip on;并设置gzip_types text/css application/javascript image/svg+xml;注意:图片(.png/.jpg)本身已压缩,无需再 gzip;但 SVG、CSS、JS 等文本类资源压缩收益明显
后端要“守规矩”,别抢 Nginx 的活
Python 框架若自行提供静态服务,会抵消所有优化效果:
- Django:上线前务必运行
python manage.py collectstatic,并将DEBUG=False,禁用开发模式下的 static 服务 - Flask:关闭
app.run(debug=True)中的静态文件自动服务;生产环境不要用send_from_directory响应前端资源 - 模板中静态链接必须与 Nginx 配置 URL 一致,例如 Nginx 映射
/static/,模板就该用{{ url_for('static', filename='css/main.css') }}
不复杂但容易忽略



















