uWSGI + nginx部署教程:3行配置让Python应用秒上生产环境

uWSGI + nginx部署教程:3行配置让Python应用秒上生产环境 uWSGI nginx部署教程3行配置让Python应用秒上生产环境【免费下载链接】uwsgi-docsOfficial uWSGI docs, examples, tutorials, tips and tricks项目地址: https://gitcode.com/gh_mirrors/uw/uwsgi-docs还在为 Python 应用上线发愁本文基于官方 uWSGI 文档仓库uwsgi-docs中的实战教程手把手教你用 uWSGI nginx 这套经典组合部署 Python 应用。你只需 3 行核心 nginx 配置就能把 Flask、Django 或任意 WSGI 应用快速送上生产环境——无需复杂原理跟着做 10 分钟即可跑通。为什么选 uWSGI nginx组件角色优点nginx面向客户端的反向代理高并发、直接处理静态文件、安全加固uWSGIWSGI 应用服务器进程管理、优雅重启、支持 Unix socket 高效通信正如官方 FAQ 中定义的那样uWSGI 被称为“网络应用的瑞士军刀”见FAQ.rst进程管理、资源限制、监控、负载均衡全都内置而不只是一个简单的 HTTP 服务器。浏览器只和 nginx 说话动态请求经 socket 转发给 uWSGI最终由 Python 应用处理。整体链路如下浏览器 - nginx - socket - uWSGI - Python 应用部署架构一图看懂生产环境的黄金法则是静态文件让 nginx 直接出动态请求才交给 uWSGI。这样应用进程不处理任何图片、CSS、JS性能最好、资源占用最低见Nginx.rst中 Static files 一节的官方建议。第 1 步安装 uWSGI在 Python 虚拟环境中一行命令搞定pip install uwsgi⚠️ 源码编译方式需要 C 编译器和 Python 开发头文件详见Install.rst生产环境推荐用 pip 安装简单可靠。第 2 步编写 uWSGI 配置文件创建mysite_uwsgi.ini这是整个部署的核心[uwsgi] chdir /path/to/your/project # 项目目录 module mysite.wsgi # WSGI 入口模块 home /path/to/virtualenv # 虚拟环境路径 master true # 开启主进程生产必备 processes 4 # worker 进程数 socket /path/to/your/project/mysite.sock # Unix socket vacuum true # 退出时清理 socket 文件 chmod-socket 664 # socket 权限避免 nginx 连不上然后启动并验证uwsgi --ini mysite_uwsgi.ini第 3 步nginx 3 行核心配置这是全文最关键的部分——在 nginx 站点配置中只需 3 行就能把请求交给 uWSGI摘自Nginx.rstserver { listen 80; server_name example.com; # —— 核心 3 行开始 —— location / { uwsgi_pass unix:///path/to/your/project/mysite.sock; include uwsgi_params; } # —— 核心 3 行结束 —— }uwsgi_pass指定 uWSGI 的 socket 地址用 TCP 端口则写成127.0.0.1:3031include uwsgi_paramsnginx 发行版自带该文件负责把REQUEST_METHOD、QUERY_STRING等标准变量完整传递给 uWSGI配置静态文件让 nginx 绕过 uWSGI 直接响应location /static { alias /path/to/your/project/static; }最后重新加载 nginx 即完成部署sudo nginx -t sudo nginx -s reload常见问题快速排查① 浏览器报 502 Bad Gateway说明 nginx 连不上 uWSGI。依次检查socket 路径是否与uwsgi_pass一致、uWSGI 进程是否存活、socket 权限是否足够加--chmod-socket664。② nginx 日志报 Permission denied典型错误为connect() to unix:///...sock failed (13: Permission denied)。用chmod-socket 664解决或将 nginx 运行用户加入 socket 所属组见tutorials/Django_and_nginx.rst排查章节。③ 浏览器直接访问 8001 端口没有响应这是正常现象——uWSGI socket 说的是 uwsgi 协议而非 HTTP浏览器只能经 nginx 访问见 Django_and_nginx 教程中的说明。进阶用 Emperor 模式实现开机自启uWSGI 的 Emperor皇帝模式会监视一个目录为其中每个配置文件自动派生一个 vassal 实例配置变更时自动重启对应服务非常适合多应用托管sudo mkdir -p /etc/uwsgi/vassals sudo ln -s /path/to/your/mysite/mysite_uwsgi.ini /etc/uwsgi/vassals/ sudo uwsgi --emperor /etc/uwsgi/vassals --uid www-data --gid www-dataEmperor 与 vassal 机制的完整说明见Emperor.rst。生产环境加分项部署后建议在 ini 文件中补充以下官方推荐选项来源tutorials/Django_and_nginx.rst尾部清单选项作用harakiri 20请求卡死超过 20 秒自动杀掉 worker 重生max-requests 5000worker 处理 5000 个请求后重启防内存泄漏limit-as 256限制单进程内存上限MBdaemonize /var/log/uwsgi/app.log后台运行并写日志总结本文带你完成了完整的 uWSGI nginx 部署流程pip install uwsgi—— 一行安装ini 配置—— 声明项目、socket 和进程数nginx 3 行——uwsgi_passinclude uwsgi_params打通链路Emperor 模式—— 开机自启、多应用自动管理掌握这套流程后你可以在单机轻松部署多个 Python 应用若后续想扩展可继续探索Nginx.rst中的集群负载均衡upstream与动态应用挂载UWSGI_SCRIPT/mount等高级玩法。【免费下载链接】uwsgi-docsOfficial uWSGI docs, examples, tutorials, tips and tricks项目地址: https://gitcode.com/gh_mirrors/uw/uwsgi-docs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考