使用 nginx 和 gunicorn 运行多个 django 项目
Posted
技术标签:
【中文标题】使用 nginx 和 gunicorn 运行多个 django 项目【英文标题】:Run multiple django project with nginx and gunicorn 【发布时间】:2019-06-19 21:52:41 【问题描述】:我正在使用 Ubuntu 18 服务器 并使用 nginx 和 gunicorn 我按照 Digitalocean 教程进行服务器设置。我成功完成了一个项目,但现在我需要在服务器下运行多个项目。
这是我的 gunicorn 设置
命令:
sudo nano /etc/systemd/system/gunicorn.service
文件:
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=rfr
Group=www-data
WorkingDirectory=/home/rfr/helpdesk/helpdesk
ExecStart=/home/rfr/helpdesk/env/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
helpdesk.wsgi:application
[Install]
WantedBy=multi-user.target
这也是我的 nginx 设置
命令:
sudo nano /etc/nginx/sites-available/helpdesk
文件:
server
listen 80;
server_name 192.168.11.252;
location = /favicon.ico access_log off; log_not_found off;
location /assets/
root /home/rfr/helpdesk/helpdesk;
location /
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
现在如何在以下IP下添加另一个项目?我想为这样的访问项目配置我的 nginx 设置
192.168.11.252/firstProject
192.168.11.252/secoundproject
我尝试了几个谷歌,但没有更多帮助。
【问题讨论】:
你总是可以在不同的端口上运行项目。 是的,没错,但我该怎么做?请您清楚地提供该设置吗?我尝试了很多,但提供了服务器 500 错误 【参考方案1】:您将 proxy_pass 与两个不同的套接字一起使用。在第一个项目上设置 gunicorn 以侦听名为 first_project.sock 的套接字,并在第二个项目上设置 gunicorn 以侦听名为 second_project.sock 的套接字。
gunicorn for first project
[Unit]
Description=gunicorn for firstProject
Requires=gunicorn.socket
After=network.target
[Service]
User=rfr
Group=www-data
WorkingDirectory=/home/rfr/first_project/first_project
ExecStart=/home/rfr/first_project/env/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/first_project.sock \
first_project.wsgi:application
[Install]
WantedBy=multi-user.target
gunicorn for second project
[Unit]
Description=gunicorn for secondProject
Requires=gunicorn.socket
After=network.target
[Service]
User=rfr
Group=www-data
WorkingDirectory=/home/rfr/second_project/second_project
ExecStart=/home/rfr/second_project/env/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/second_project.sock \
second_project.wsgi:application
[Install]
WantedBy=multi-user.target
nginx configuration
server
listen 80;
server_name 192.168.11.252;
location = /favicon.ico access_log off; log_not_found off;
location /firstProject/assets/
root /home/rfr/first_project/first_project;
location /secondProject/assets/
root /home/rfr/second_project/second_project;
location /firstProject
include proxy_params;
rewrite /firstProject(.*) $1;
proxy_pass http://unix:/run/first_project.sock;
location /secondProject
include proxy_params;
rewrite /secondProject(.*) $1;
proxy_pass http://unix:/run/second_project.sock;
这里的繁重工作是 nginx rewrite
指令,它会让您的应用程序将 url 视为 url 中 firstProject
或 secondProject
之后的所有内容。
【讨论】:
感谢您的回答,但我有点困惑proxy_pass http://unix:/run/second_project.sock;
行是什么意思这条路径是什么?我把http://unix:/run/gunicorn.sock
放在那里,我的服务器停止运行。你能解释一下吗?
请用你实际的第二个配置更新你的问题,我无法用你的所作所为来读懂你的想法。
刚刚更新了我的问题如果您需要更多信息,请发表评论
再看一下我发布的代码。您的 gunicorns 必须在不同的套接字上运行。在帮助台 systemd 单元中将帮助台设置为绑定到/run/helpdesk.sock
,然后将约会设置为绑定到/run/appointment.sock
。确保您proxy_pass
到每个位置的相应套接字。
@2ps,你能看看这个***.com/questions/55638962/…以上是关于使用 nginx 和 gunicorn 运行多个 django 项目的主要内容,如果未能解决你的问题,请参考以下文章
nginx+gunicorn+flask部属web时,使用nginx如何指定多个静态文件路径
如何使用 Nginx 和 GUnicorn 在单个服务器上部署多个 Django 应用程序?
如何在同一个域中使用 Nginx 和 Gunicorn 运行 Django 和 Wordpress?