Docker部署Nginx反向代理Airflow/Flower失效问题求助
问题解决:Nginx反向代理Airflow路径失效问题
问题场景
通过Docker搭建的架构:
- Nginx -> index.html(访问地址:
localhost:8080) - Nginx -> Airflow(访问地址:
localhost:8080/airflow/) - Nginx -> Flower(访问地址:
localhost:8080/flower/)
当前localhost:8080可正常显示静态页面,但访问localhost:8080/airflow/时失败,Nginx日志报错:
nginx-for-airflow_1 | 2022/08/04 09:09:42 [error] 30#30: *5 "/usr/share/nginx/html/airflow/index.html" is not found
核心原因
日志显示Nginx尝试在本地静态文件目录查找/airflow/index.html,说明/airflow/的反向代理规则未生效,请求走了默认静态文件路由;同时Airflow的外部访问路径配置不匹配,导致转发逻辑异常。
修复步骤
1. 修正Nginx配置
关键调整点:
- 给
/airflow/的proxy_pass末尾添加斜杠,确保请求转发到Airflow的根路径 - 显式配置根路径
/的静态文件处理规则,避免默认路由冲突 - 补充必要的反向代理头部,确保Airflow能正确识别请求来源
修改后的nginx.conf:
upstream airflow_webserver { server airflow-webserver:8080; } upstream airflow_flower { server flower:5555; } server { # 指定Nginx静态文件根目录,对应默认index.html位置 root /usr/share/nginx/html; listen 80; server_name localhost; charset utf-8; # 根路径处理静态文件请求 location / { try_files $uri $uri/ =404; } location /airflow/ { proxy_pass http://airflow_webserver/; # 末尾必须加斜杠 proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; } location /flower/ { proxy_pass http://airflow_flower/; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
2. 调整Airflow外部访问路径
修改airflow.cfg,让Airflow知道自己的外部访问前缀:
base_url = http://localhost:8080/airflow web_server_port = 8080 enable_proxy_fix = True proxy_fix_x_port = 3
3. 重启服务
执行命令重启相关容器:
docker-compose restart nginx-for-airflow airflow-webserver
验证
- 访问
http://localhost:8080:正常显示Nginx静态页面 - 访问
http://localhost:8080/airflow/:正常进入Airflow控制台 - 访问
http://localhost:8080/flower/:正常进入Flower监控页面
内容的提问来源于stack exchange,提问作者JaeyungL
相关产品推荐
相关产品推荐

