使用 nginx 和 gunicorn 运行多个 django 项目

Posted

技术标签:

【中文标题】使用 nginx 和 gunicorn 运行多个 django 项目【英文标题】:Run multiple django project with nginx and gunicorn 【发布时间】:2019-06-19 21:52:41 【问题描述】:

我正在使用 Ubuntu 18 服务器 并使用 nginxgunicorn 我按照 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 中 firstProjectsecondProject 之后的所有内容。

【讨论】:

感谢您的回答,但我有点困惑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 运行烧瓶应用程序

如何使用 Nginx 和 GUnicorn 在单个服务器上部署多个 Django 应用程序?

如何在同一个域中使用 Nginx 和 Gunicorn 运行 Django 和 Wordpress?

使用 Gunicorn + Nginx + Flask 有啥好处? [复制]

AWS上带有nginx和gunicorn的Flask应用程序[重复]