我有一个 UWSGI 应用程序和一个 Celery/Flower 任务工作器/监视器。它们作为多容器应用程序部署在 Azure App Service 上。
在本地,我通过在 HTTP 请求中使用“HOST: worker”将作业路由到工作器。任务监视器设置为 default_server。两者都在端口 80 上监听,因为 Azure App Service 仅允许公开端口 80/443。本地一切正常(使用 docker-compose)。但是,当部署到 Azure App Service 时,请求的路由不起作用,Azure App Service 返回 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";
}
}
答案1
我最终通过根据位置路由请求解决了该问题。请注意,位置已更改,以避免与后端应用程序的内部路由发生冲突。
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;
}
}