系列:容器部署基础
- Docker 安装与使用教程:从零部署第一个容器服务
- Dockerfile 入门:构建自己的应用镜像
- Docker Compose 使用指南:管理多容器服务
- Docker 数据卷与备份:数据库容器怎么保护数据
- Docker 网络与端口映射:容器之间怎么通信
- Docker 日志和排障:logs、exec、inspect、stats
- 用 Docker 部署一个 Python Web 项目
- Nginx 反向代理入门:静态文件、HTTPS 和 Web 服务转发
- HTTPS 和证书部署指南:Let’s Encrypt、Cloudflare、Nginx 怎么配
- Docker 生产环境部署注意事项:镜像、日志、数据卷和健康检查
很多 Python Web 项目上线时,前面都会放一个 Nginx。它负责接收浏览器请求,再把动态请求转发给后端服务,也可以直接处理静态文件和 HTTPS。
如果你已经看过 Python Web 项目部署指南:Gunicorn、Uvicorn、Nginx 和 Docker,这篇可以当作 Nginx 部分的展开。
反向代理解决什么问题
应用服务通常只监听本机端口,比如 127.0.0.1:8000。Nginx 监听 80 或 443,再把请求转发过去。
browser -> nginx:443 -> app:8000这样有几个好处:
- 统一处理 HTTPS
- 隐藏后端真实端口
- 静态文件不用交给 Python 进程
- 可以设置请求大小、超时和缓存
一个最小配置
先从能稳定转发的配置开始,不要一上来就加缓存、限流和复杂 rewrite。最小配置的目标是让请求头正确传给后端,并且 Nginx 能清楚地知道要把请求交给哪个本地端口。
server { listen 80; server_name app.internal;
location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }}检查配置:
nginx -t重新加载:
systemctl reload nginx静态文件怎么放
静态文件可以让 Nginx 直接返回。
location /static/ { alias /srv/app/static/; access_log off; expires 7d;}注意 alias 目录最后的 /。路径写错时,最常见表现是 404。
常见排查点
502 一般说明 Nginx 找不到后端服务。先看后端端口:
ss -lntp | grep 8000再看 Nginx 错误日志:
journalctl -u nginx -n 100 --no-pager如果是 Docker 部署,还要确认容器网络和端口映射,可以接着看 Docker 网络与端口映射:容器之间怎么通信。
不要忽略请求头
X-Forwarded-Proto 会影响后端判断当前请求是不是 HTTPS。很多登录回调、跳转链接、CSRF 判断都依赖它。
如果 Django 或 FastAPI 生成的 URL 协议不对,先检查 Nginx 是否传了转发头,再检查应用是否信任这些头。
总结
Nginx 配置不需要一开始写很复杂。先让转发、静态文件和日志正常,再逐步加 HTTPS、缓存和限流。排查时先看后端端口,再看 Nginx 错误日志,通常能很快定位问题。
后续可以继续看 HTTPS 和证书部署指南:Let’s Encrypt、Cloudflare、Nginx 怎么配。如果服务已经容器化,也建议配合 Docker 生产环境部署注意事项:镜像、日志、数据卷和健康检查 一起检查。