将不同的 Django 应用程序托管为 nginx 位置的正确方法是什么

将不同的 Django 应用程序托管为 nginx 位置的正确方法是什么

我有一个静态网站(www.example.com)和一个 Django 应用程序(example.com/app1),运行在一台服务器机器(机器 1)上。

网站和应用程序均使用 nginx 提供服务。我使用 gunicorn 来为 Django 应用程序提供服务。

机器1上的nginx配置如下:

upstream gunicorn {
    server 127.0.0.1:8000; # gunicorn serving App1
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;

root /var/www/example;  

index index.html index.htm index.nginx-debian.html;

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    # try_files $uri $uri/ =404;
    try_files $uri $uri/ /;
}

# Django media and static files
location /media  {
    alias /var/www/media;
    }

location /static {
    alias /var/www/static;
    }

# gunicorn App1
location /app1 {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header SCRIPT_NAME /app1;
    proxy_redirect off;
    proxy_pass http://gunicorn;
}

location /app2 {
    # This App2 is served on a different machine (machine 2).
    # Not yet implemented
}
}

我现在正尝试在第二台机器(机器 2)上将第二个应用程序(example.com/app2)作为第二个位置运行。是否需要在机器 2 上运行另一个 nginx 才能使其正常工作?或者我是否可以转发到机器 2 上的 gunicorn?我已经尝试过使用

upstream gunicornMachine2 {
    server xxx.xxx.xxx.xxx:80 # IP of second machine or port 8000 for gunicorn
}

location /app2 {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header SCRIPT_NAME /app2;
    proxy_redirect off;
    proxy_pass http://gunicornMachine2;
}

这确实提供了 502 Bad Gateway。实现此功能的最佳方法是什么?

相关内容