У меня есть статический веб-сайт (www.example.com) и приложение Django (example.com/app1), работающие на одном сервере (компьютер 1).
И веб-сайт, и приложение обслуживаются с помощью nginx. Я использую Gunicorn для обслуживания приложения Django.
Конфигурация nginx на машине 1 выглядит так:
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
}
}
Теперь я пытаюсь запустить второе приложение (example.com/app2) в качестве второго места на втором компьютере (компьютер 2). Обязательно ли запускать другой nginx на машине 2, чтобы это работало? Или я могу просто переслать Gunicorn на машине 2? Я уже пробовал оба, используя
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. Как лучше всего это реализовать?