nginx 如何配置多个django项目运行在不同的系统端口使用相同的IP与gunicorn

jbose2ul  于 2022-11-02  发布在  Nginx
关注(0)|答案(1)|浏览(269)

这个问题有点长,但我试着从我的疑惑和试验中提供尽可能多的信息。我一直在摆弄gunicorn和nginx的配置,以在AWS EC2 ubuntu服务器上托管3个django项目。我一直无法对它们进行排序以运行,也无法完全理解它们的设置。

**(1)**首先我有他们如下(每个项目文件夹有自己的venv设置):

drwxrwxr-x 10 ubuntu ubuntu 4096 Mar 26 02:10 first_project/
drwxrwxr-x  7 ubuntu ubuntu 4096 Mar 26 01:20 second_project/
drwxrwxr-x  7 ubuntu ubuntu 4096 Mar 26 01:25 third_project/

**(2)**我尝试在/etc/systemd/system/文件夹中创建单独的.socket文件

-rw-r--r--  1 root root  112 Mar 26 02:17  gunicorn_first.socket
-rw-r--r--  1 root root  112 Mar 26 02:19  gunicorn_second.socket
-rw-r--r--  1 root root  112 Mar 26 02:22  gunicorn_third.socket

(3),并将所有这些内容包括在内:

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

**(4)**在添加.socket文件后,我添加了.service文件

-rw-r--r--  1 root root  112 Mar 26 02:35  gunicorn_first.service
-rw-r--r--  1 root root  112 Mar 26 02:39  gunicorn_second.service
-rw-r--r--  1 root root  112 Mar 26 02:44  gunicorn_third.service

(5)并增加内容如下(第N次-〉第一、第二、第三次)

[Unit]
Description=gunicorn daemon
Requires=gunicorn_NTH.socket
After=network.target

[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/NTH_project
ExecStart=/home/ubuntu/NTH_project/venv/bin/gunicorn --workers 3 --access-logfile - --bind unix:/run/gunicorn.sock NTH_project.wsgi:application

[Install]
WantedBy=multi-user.target

**(6)**最后是我的nginx默认配置(/etc/nginx/sites-enabled/default),如下所示:我已经打开了端口8081、8082、8083 -每个项目一个

server {
    listen 8081;
    server_name MY_IP;

    location /first_project {
        root /home/ubuntu/first_project;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn_first.sock;
    }
}

server {
    listen 8082;
    server_name MY_IP;

    location /second_project {
        root /home/ubuntu/second_project;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn_second.sock;
    }
}

server {
    listen 8083;
    server_name MY_IP;

    location /third_project {
        root /home/ubuntu/third_project;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn_third.sock;
    }
}

上面的方法不起作用,所以我用http://unix:/run/gunicorn.sock-〉替换了每一个中的proxy_pass,如果我这样做了,只有最后一个应用程序(8083)在工作,当我从postman (http://MY_IP:8083/some_endpoint)发送请求到端点时。
有人能帮助我如何确保所有3个应用程序都在运行吗

(http://MY_IP:8081/some1_endpoint)
(http://MY_IP:8082/some2_endpoint)
(http://MY_IP:8083/some3_endpoint)

如果你能指出1-6中哪些部分可以编辑,那就太好了,提前谢谢。

hc8w905p

hc8w905p1#

你提到gunicorn.sock可以工作(对于其中一个站点)。在进行最初的更改后,套接字和服务配置是否重新启动?所有的服务是否都在运行?

sudo systemctl restart <name>.socket
sudo systemctl restart <name>.service
sudo systemctl status <name>.service

是否可以直接访问这些服务(例如,当不使用nginx作为代理时)?请考虑修改gunicorn exec并查看错误日志。

ExecStart=/home/ubuntu/NTH_project/venv/bin/gunicorn --workers 3 --error-logfile /path/to/error.log ...

一旦服务被确认为可访问,检查nginx配置是否有错误,确保proxy_params在预期的位置,或者如果有问题,删除此行并直接输入任何所需的代理配置。

sudo nginx -t

验证后,重新启动nginx以重新建立与Gunicorn的套接字连接,并验证是否没有其他问题。

sudo systemctl restart nginx
sudo systemctl status nginx
tail var/log/nginx/error.log

相关问题