将Python Web项目部署到Nginx服务器,核心是通过中间件实现Nginx与Python应用通信,同时配置反向代理转发动态请求,单独处理静态文件提升访问效率。常见的Python Web框架如Flask、Django都可以通过uWSGI作为中间件对接Nginx。

环境准备
首先需要确保服务器已经安装好Python环境、Nginx服务,以及uWSGI中间件。如果是Ubuntu系统,可以通过以下命令安装依赖:
# 安装Nginx sudo apt update sudo apt install nginx -y # 安装uWSGI pip install uwsgi
Python项目配置
以一个简单的Flask项目为例,先创建项目文件,确保项目可以独立运行:
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello Python Deploy'
if __name__ == '__main__':
app.run()
接下来需要编写uWSGI的配置文件,用于启动Python应用并监听指定端口:
# uwsgi.ini [uwsgi] # 项目目录 chdir = /home/python/project # 启动文件 wsgi-file = app.py # 应用实例 callable = app # 监听端口 http = 127.0.0.1:5000 # 进程数 processes = 4 # 线程数 threads = 2 # 日志路径 logto = /home/python/project/uwsgi.log
启动uWSGI服务:
uwsgi --ini uwsgi.ini
Nginx反向代理配置
Nginx反向代理的作用是将用户的动态请求转发到uWSGI监听的端口,避免用户直接访问Python应用端口。打开Nginx的站点配置文件,通常是/etc/nginx/sites-available/default,修改配置内容:
server {
# 监听80端口
listen 80;
# 服务器域名,没有域名可以填服务器公网IP
server_name 192.168.0.1;
location / {
# 反向代理到uWSGI监听的地址
proxy_pass http://127.0.0.1:5000;
# 传递请求头信息
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
修改完成后检查Nginx配置是否正确,然后重启Nginx服务:
# 检查配置语法 sudo nginx -t # 重启Nginx sudo systemctl restart nginx
静态文件分发配置
为了提升静态资源的访问速度,通常将CSS、JS、图片等静态文件交给Nginx直接处理,不需要转发到Python应用。假设项目的静态文件存放在/home/python/project/static目录下,在Nginx配置中添加静态文件路径规则:
server {
listen 80;
server_name 192.168.0.1;
# 静态文件配置
location /static {
# 静态文件实际存放路径
alias /home/python/project/static;
# 缓存时间30天
expires 30d;
}
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
如果是Django项目,静态文件配置需要对应Django的STATIC_ROOT设置,先执行python manage.py collectstatic收集静态文件到指定目录,再在Nginx中配置对应的alias路径即可。
常见问题排查
- 如果访问页面出现502错误,先检查uWSGI服务是否正常启动,端口是否被占用。
- 静态文件无法访问,检查Nginx配置中的alias路径是否正确,文件权限是否允许Nginx进程读取。
- 反向代理后获取不到用户真实IP,需要在Nginx配置中添加
proxy_set_header X-Real-IP $remote_addr;等请求头配置。