nginx需在同一server块内精准分层匹配动静资源:静态资源用location明确捕获并配置root/alias、缓存、压缩、禁日志;动态请求proxy_pass兜底;后端须关闭调试静态服务,模板路径须与nginx配置一致。

核心是让 Nginx 在同一 server 块内,对静态资源“直给”,对动态请求“转发”,不混淆、不回退、不干扰。关键不在功能有没有,而在匹配是否精准、路径是否安全、缓存是否生效。
用 location 分层匹配,避免规则打架
静态资源必须靠明确的 location 捕获,不能依赖 try_files 回退到后端——否则图片 404 会悄悄打到 Python,白白消耗进程和数据库连接。
- 优先匹配文件后缀:用 location ~* \.(js|css|png|jpg|gif|woff2|svg|ico)$ 直接响应,配合 root /var/www/myapp/static(注意 root 后路径拼接逻辑)
- 显式暴露静态前缀:如项目用
/static/,就配 location /static/ { alias /var/www/myapp/collected-static/; }(alias 更准,结尾斜杠必须一致) - 动态请求兜底:所有未被上述规则捕获的请求,统一交给 proxy_pass http://backend,不加 trailing slash(如
http://127.0.0.1:8000,不是.../8000/)
静态资源交付要真快,不止是“不走后端”
分离只是第一步;不加缓存、不压缩、不设头,浏览器仍反复请求,带宽和磁盘 I/O 还是压在 Nginx 上。
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
- 长期缓存不变资源:expires 1y; + add_header Cache-Control "public, immutable";
- 压缩文本类静态文件:gzip on; 并设置 gzip_types text/css application/javascript image/svg+xml;
- 禁用静态资源访问日志:access_log off;(减少磁盘写入压力)
动态请求转发要稳,防“假通真慢”
Python 后端可能活着但卡顿,Nginx 若继续转发,用户就会卡在 loading。必须让调度感知真实负载。
- 启用 upstream 主动健康检查:health_check interval=3s fails=2 passes=2 match=status_ok;,配合 match 块校验响应体
- 复用连接降低开销:proxy_http_version 1.1; + proxy_set_header Connection ''; + upstream 里设 keepalive 32;
- 限制单节点并发上限:server 127.0.0.1:8000 max_conns=1024;,防某 worker 过载拖垮整组
后端需“守规矩”,别自己抢活干
Python 框架若开启调试模式下的静态服务,或模板中写错 static 路径,会让动静分离失效。
- Django:上线必须 DEBUG=False,并运行 python manage.py collectstatic 把所有静态文件归集到统一目录
- Flask/FastAPI:关闭开发服务器的 static 自动服务(如 Flask 的
app.run(debug=True)中 static_file 选项) - 模板引用路径必须与 Nginx 配置的 URL 前缀一致,例如 Nginx 配了
location /static/,模板就该用/static/css/app.css或框架对应函数(如{{ url_for('static', filename='css/app.css') }})
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










