两个反向代理后面的气流 - 图 GET 请求不包含任何 DAG ID
Airflow behind two reverse proxies - graph GET request does not contain any DAG ID
我的设置:
我在两个 nginx 代理后面 运行ning Airflow 1.10.9。第一个代理将请求转发到位于私有网络中的第二个代理。第二个代理将请求转发到请求的 Airflow 实例上,其中 airflow 主机在 URL 中指定。这基本上允许我们 运行 多个气流实例并正确路由到它们。
我还将 Airflow base_url 更新为 http://myhost/airflow-<airflowid>/
这里,URL 的气流 ID 部分是第二个代理如何识别要转发到哪台机器的方式。
代理设置正在运行,因为 Airflow UI 可以访问,我可以看到我的 DAGS 已加载到 UI 中。但是,当我尝试与 DAG 交互时,出现以下错误:
DAG "None" seems to be missing.
我将问题追踪到到达 Airflow UI 的 GET 请求。我可以看到该请求不包含任何 DAG ID。在我工作的 Airflow 实例上(一个不在任何代理后面 运行ning 的实例)请求包含 DAG ID run_etl
:
"GET /graph?dag_id=run_etl&root=&execution_date=2020-02-10T11%3A42%3A14.454118%2B00%3A00 HTTP/1.1" 200 10174 "http://10.83.163.248:3128/graph?dag_id=run_etl" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36"
在私有网络中的 Airflow 实例 运行 上,GET 请求不包含 DAG ID:
"GET /admin/airflow/graph HTTP/1.1" 302 221 "https://<redacted host>/admin/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36"
我的nginx配置如下:
代理服务器 1:
server {
listen 443 ssl;
server_name <redacted server name>;
location ~ /airflow-(.*) {
proxy_pass http://172.23.7.79:80;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
代理服务器 2:
server {
listen 80;
location ~ /airflow-([^\/]+)/(.*) {
proxy_pass http://-<redacted hostname>:8080/airflow-/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
任何关于此处错误的想法将不胜感激!
答案比我预期的更直接。
代理 2 需要一些额外的配置才能在代理传递中传递 URL 查询。
proxy_pass http://-<redacted hostname>:8080/airflow-/$is_args$args;
参考:How can query string parameters be forwarded through a proxy_pass with nginx?
我的设置:
我在两个 nginx 代理后面 运行ning Airflow 1.10.9。第一个代理将请求转发到位于私有网络中的第二个代理。第二个代理将请求转发到请求的 Airflow 实例上,其中 airflow 主机在 URL 中指定。这基本上允许我们 运行 多个气流实例并正确路由到它们。
我还将 Airflow base_url 更新为 http://myhost/airflow-<airflowid>/
这里,URL 的气流 ID 部分是第二个代理如何识别要转发到哪台机器的方式。
代理设置正在运行,因为 Airflow UI 可以访问,我可以看到我的 DAGS 已加载到 UI 中。但是,当我尝试与 DAG 交互时,出现以下错误:
DAG "None" seems to be missing.
我将问题追踪到到达 Airflow UI 的 GET 请求。我可以看到该请求不包含任何 DAG ID。在我工作的 Airflow 实例上(一个不在任何代理后面 运行ning 的实例)请求包含 DAG ID run_etl
:
"GET /graph?dag_id=run_etl&root=&execution_date=2020-02-10T11%3A42%3A14.454118%2B00%3A00 HTTP/1.1" 200 10174 "http://10.83.163.248:3128/graph?dag_id=run_etl" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36"
在私有网络中的 Airflow 实例 运行 上,GET 请求不包含 DAG ID:
"GET /admin/airflow/graph HTTP/1.1" 302 221 "https://<redacted host>/admin/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36"
我的nginx配置如下:
代理服务器 1:
server {
listen 443 ssl;
server_name <redacted server name>;
location ~ /airflow-(.*) {
proxy_pass http://172.23.7.79:80;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
代理服务器 2:
server {
listen 80;
location ~ /airflow-([^\/]+)/(.*) {
proxy_pass http://-<redacted hostname>:8080/airflow-/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
任何关于此处错误的想法将不胜感激!
答案比我预期的更直接。
代理 2 需要一些额外的配置才能在代理传递中传递 URL 查询。
proxy_pass http://-<redacted hostname>:8080/airflow-/$is_args$args;
参考:How can query string parameters be forwarded through a proxy_pass with nginx?