Gunicorn是Python Web应用的生产级WSGI服务器,需配合Nginx反向代理、Docker容器化及健康监控构成完整部署方案。
Gunicorn是为Python Web应用(如Flask、Django)设计的生产级WSGI HTTP服务器,它通过预加载、多进程和异步worker模型提升并发处理能力。不建议直接用开发服务器(如Flask的run()或Django的runserver)对外提供服务——它们未针对高负载、安全性和稳定性做优化。
启动时推荐显式指定关键参数:
0.0.0.0:8000 或 Unix socket(/tmp/gunicorn.sock),后者配合Nginx更高效;2 × CPU核心数 + 1,避免过多进程争抢资源;sync,I/O密集型可尝试 gevent 或 eventlet(需额外安装);30 秒超时、5 秒保活;Nginx不直接运行Python代码,而是作为反向代理层,负责接收客户端请求、转发给Gunicorn,并处理SSL终止、静态资源服务、限流、缓存和连接复用等任务。这种分离让各组件专注所长,也提升了整体健壮性。
典型Nginx配置要点:
upstream 块定义Gunicorn后端(支持多个worker或实例,便于横向扩展);server 块中启用 proxy_pass 指向 upstream,同时设置 proxy_set_header 传递真实IP、协议等关键头信息(如 X-Forwarded-For, X-Forwarded-Proto);/static/ 或 /media/ 路径使用 alias 或 root 直接由Nginx服务,避免请求穿透到Python层;client_max_body_size(如 10M)以支持文件上传;ssl_certificate 和 ssl_certificate_key 实现HTTPS,推荐使用Let’s Encrypt自动续签。Docker让Python应用具备环境一致性与可移植性。推荐采用多阶段构建(multi-s
tage build)减小镜像体积:第一阶段用完整Python环境安装依赖并编译(如C扩展),第二阶段仅复制编译产物和源码到精简的基础镜像(如 python:3.11-slim)。
关键实践包括:
USER appuser)运行Gunicorn,降低安全风险;ENTRYPOINT 或 CMD,确保容器启动即服务就绪;GUNICORN_CMD_ARGS)或配置文件(gunicorn.conf.py)管理Gunicorn参数,便于不同环境切换;stdout/stderr,方便Docker日志驱动统一收集(如json-file、fluentd);容器编排(如Kubernetes)或CI/CD流水线依赖可靠的健康检查机制。Gunicorn本身无内置HTTP健康端点,需在应用中添加简单路由(如 /healthz),返回200并检查数据库连接、缓存可用性等关键依赖。
监控方面建议:
gunicorn --stats 或集成Prometheus exporter(如 gunicorn-exporter)暴露worker数、请求数、响应延迟等指标;stub_status 模块或使用 nginx-prometheus-exporter;/healthz),再触发Nginx重载或服务注册;