У меня есть приложение UWSGI и рабочий / монитор задач Celery / Flower. Они развернуты в службе приложений Azure как многоконтейнерное приложение.
Локально я перенаправляю задания работнику, используя «HOST: worker» в HTTP-запросе. Монитор задач установлен как default_server. Оба прослушивают порт 80, поскольку служба приложений Azure позволяет использовать только порт 80/443. Локально все работает нормально (с помощью docker-compose). Однако при развертывании в службе приложений Azure маршрутизация запроса не работает, и служба приложений Azure возвращает ошибку 404 с рекомендацией создать собственный домен.
Какие у меня есть варианты исправить это без настройки личного домена.
Вот мой nginx.conf
server {
listen 80;
server_name worker;
location / {
include uwsgi_params;
uwsgi_pass flask:5001;
}
}
server {
listen 80 default_server;
server_name monitor;
charset utf-8;
location / {
proxy_pass http://monitor:5555;
proxy_set_header Host $host;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
В конце концов я решил проблему, направив запросы на основе местоположения. Обратите внимание, что расположение было изменено, чтобы избежать конфликта с внутренней маршрутизацией серверного приложения.
server {
listen 80 default_server;
charset utf-8;
location / {
proxy_pass http://monitor0:5555;
proxy_set_header Host $host;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /worker0/ {
include uwsgi_params;
uwsgi_pass flask:5001;
}
}