Airflow + Nginx 设置给出了 Airflow 404 = 很多圈子
Posted
技术标签:
【中文标题】Airflow + Nginx 设置给出了 Airflow 404 = 很多圈子【英文标题】:Airflow + Nginx set up gives Airflow 404 = lots of circles 【发布时间】:2019-09-30 00:23:29 【问题描述】:我正在尝试使用此处给出的说明在 nginx 后面设置 Airflow。
airflow.cfg 文件
base_url = https://myorg.com/airflow
web_server_port = 8081
.
.
.
enable_proxy_fix = True
nginx 配置
server
listen 443 ssl http2 default_server;
server_name myorg.com;
.
.
.
location /airflow
proxy_pass http://localhost:8081;
proxy_set_header Host $host;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto "https";
Airflow 网络服务器和调度程序已启动并作为 systemd 运行。当我尝试访问 https://myorg.com/airflow/ 时,它给出了 Airflow 404 = 很多圈子。
可能出了什么问题?非常感谢您帮助运行此程序。
【问题讨论】:
【参考方案1】:我刚刚遇到了同样的问题,并通过在该位置添加了一个拖尾 /
来解决它:location /airflow/
而不是 location /airflow
。尾部反斜杠告诉 nginx 删除相应 python 应用程序的 uri 路径中前面的 /airflow。
我的整体配置如下:
server_name my_server.my_org.net;
location /airflow/
proxy_pass http://localhost:9997;
proxy_set_header Host $host;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
在airflow.cfg
我另外指定:
base_url = http://my_server.my_org.net/airflow
enable_proxy_fix = False # Seems to be deprecated?
web_server_port = 9997
【讨论】:
enable_proxy_fix
没有被弃用,但只有在 SSL 代理后面运行时才需要它(ProxyFix 确保生成的 URL 等添加了正确的方案)。【参考方案2】:
我在使用 https 时遇到了同样的问题。 但是在解决方案中使用配置导致我遇到另一个问题。
/airflow/
位置以外的任何内容都回退到 /
位置。
将 404 错误返回到资产。
使用下面的配置解决了这个问题:
location ^~ /airflow/
proxy_pass_header Authorization;
proxy_pass http://localhost:8080/airflow/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Connection "";
proxy_buffering off;
client_max_body_size 0;
proxy_read_timeout 36000s;
【讨论】:
X-Forwarded-Server
标头对 Airflow 和 ProxyFix 来说毫无意义,您可以放心地删除它。 X-Forwarded-Host
将被忽略,除非您在 webserver 部分设置了 proxy_fix_x_host = 1
,并且也不需要,因为您已经为代理请求设置了 Host
标头。
^~
修饰符仅在您的服务器有正则表达式位置规则时才需要,否则会匹配。否则 location /airflow/
就足够了。
是的!我有一条通通 php 的规则。以上是关于Airflow + Nginx 设置给出了 Airflow 404 = 很多圈子的主要内容,如果未能解决你的问题,请参考以下文章