离线内网部署Python项目并用Nginx反向代理的核心难点是Python运行时、WSGI服务器(如uWSGI/Gunicorn)及系统级依赖的完整离线安装;需在外网打包整条依赖链(系统包、Python、WSGI、Nginx、项目库),内网按系统→Python→WSGI→Nginx顺序安装,最后配置标准反向代理即可。

在离线内网环境部署 Python 项目并用 Nginx 反向代理,核心难点不在 Nginx 本身,而在于Python 运行时、WSGI 服务器(如 uWSGI 或 Gunicorn)及其系统级依赖的完整离线安装。只要把这三块依赖链一次性打包带入内网,后续配置就非常顺畅。
一、提前在外网机器上收齐所有 RPM 和源码包
关键不是“只下 Python”,而是把整条运行链所需的系统包、Python 解释器、WSGI 服务、编译工具全部拉齐:
- 用
yumdownloader --resolve下载 Python 3.x 主包 +python3-devel+gcc+make+openssl-devel+zlib-devel+libffi-devel等编译依赖 - 额外下载
uWSGI或gunicorn的 RPM 包(如有对应版本);若无,就准备其 wheel 包(.whl)和pip离线安装包 - 别忘了
nginx本体及其依赖(pcre2、zlib、openssl-libs),用同样命令下载 - 所有包统一放在一个目录(如
/tmp/offline-pkgs),再整体拷进内网
二、内网中分层安装:系统 → Python → WSGI → Nginx
顺序不能乱,否则会报“找不到头文件”或“import uwsgi 失败”:
- 先用
yum localinstall *.rpm安装所有基础系统包(含 gcc、devel 类),确保python3 -V和gcc -v可用 - 再安装 Python 3.x RPM 包(如
python3-3.9.0-*.rpm),或用源码编译安装(需提前传好Python-3.9.0.tgz并执行./configure --prefix=/usr/local/python3 && make && make install) - 配置好
PATH和软链接后,用离线pip安装uWSGI或Gunicorn:pip3 install --find-links /path/to/wheels --no-index uwsgi - 最后安装 nginx RPM 包,启动验证:
nginx -t && systemctl start nginx
三、项目依赖也得离线打包
你的 Python 项目用到的第三方库(Django、Flask、requests 等)不能靠 pip 在内网联网装:
立即学习“Python免费学习笔记(深入)”;
- 在外网机器激活相同版本 Python 虚拟环境,运行:
pip download -r requirements.txt -d ./pkg - 把整个
./pkg目录复制进内网,在项目虚拟环境中执行:pip install --find-links ./pkg --no-index -r requirements.txt - 如果项目含 C 扩展(如
psycopg2、cryptography),务必同时下载其 manylinux wheel,避免内网编译失败
四、Nginx 与 Python 对接只需配置反向代理
此时 Python 应用已能通过 uWSGI/Gunicorn 启动(例如监听 127.0.0.1:8000),Nginx 不需要任何 Python 相关模块:
- 编辑
/etc/nginx/conf.d/myapp.conf,写标准反代配置:
location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; } - 确认 SELinux 允许网络转发:
setsebool -P httpd_can_network_connect 1 - 开放防火墙端口(如 80):
firewall-cmd --permanent --add-port=80/tcp && firewall-cmd --reload


















