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 = 很多圈子的主要内容,如果未能解决你的问题,请参考以下文章

airflow是啥意思

airflow + mysql

airflow + mysql

airflow

DAG 在 Google Cloud Composer 网络服务器上不可点击,但在本地 Airflow 上运行良好

airflow系列教程 airflow的报警功能设置