如何使用NGINX与uWSGI在单台Ubuntu服务器上部署多个Django网站
同一Ubuntu服务器部署多Django项目(Nginx+uWSGI)实操规范
你之前部署失败大概率是不同项目的配置出现了命名冲突、资源路径重复的问题,按照以下步骤操作即可:
1. 每个项目配置独立的uWSGI运行实例
- 每个项目单独创建专属Python虚拟环境,安装对应依赖和uWSGI
- 每个项目单独编写uWSGI配置文件,socket路径设置为项目独有的路径,比如
/home/user/项目名/项目名.sock,不要和其他项目重复 - 为每个项目创建独立的systemd服务文件(路径
/etc/systemd/system/uwsgi-<项目名>.service),分别启动并设置开机自启,启动后确认对应sock文件正常生成
2. 每个项目编写独立的Nginx服务块配置
- 每个项目单独在
/etc/nginx/sites-available/下创建专属的conf文件,绝对不要共用配置文件 - 每个配置文件内的
upstream名称必须唯一,不能都叫django,可命名为django_<项目名>避免冲突 - 配置内的静态文件路径、sock路径、uwsgi_params路径都要对应到当前项目的实际路径,
server_name填写当前项目绑定的域名
示例第二个项目的配置参考:
# upstream名称唯一,对应项目2 upstream django_project2 { server unix:///home/user/project2/project2.sock; } server { listen 80; server_name domain2.com www.domain2.com; charset utf-8; client_max_body_size 75M; location /media { alias /home/user/project2/media; } location /static { alias /home/user/project2/static; } location / { uwsgi_pass django_project2; include /home/user/project2/uwsgi_params; } }
3. 生效配置并验证
- 创建软链接启用站点:
sudo ln -s /etc/nginx/sites-available/<项目名>.conf /etc/nginx/sites-enabled/ - 测试Nginx配置合法性:
sudo nginx -t,返回test is successful再执行下一步 - 重载Nginx使配置生效:
sudo systemctl reload nginx
常见问题排查
- 检查各项目sock文件的权限,确保Nginx运行用户有读写权限
- 执行
sudo systemctl status uwsgi-<项目名>.service确认对应uWSGI服务正常运行 - 确认所有项目的域名解析已正确指向当前服务器IP
内容的提问来源于stack exchange,提问作者Zaki Lazhari
相关产品推荐
相关产品推荐

