Airflow 3.0.0 Docker Compose UI外网IP端口无限刷新,本地正常求助
Apache Airflow 3.0.0 外网访问登录循环问题解决
问题描述
在Ubuntu 22.04服务器上通过官方Docker Compose文件搭建Apache Airflow 3.0.0,所有容器状态健康,本地访问http://localhost:8080可正常登录、操作DAG;但通过公网IPhttp://22.193.38.155:8080访问时,UI登录后持续刷新,airflow-apiserver日志重复出现以下循环条目:
airflow-apiserver-1 | INFO: 22.193.38.155:xxxxx - "GET /ui/config HTTP/1.1" 401 Unauthorizedairflow-apiserver-1 | INFO: 22.193.38.155:xxxxx - "GET /api/v2/auth/login?... HTTP/1.1" 307 Temporary Redirectairflow-apiserver-1 | INFO: 22.193.38.155:xxxxx - "GET /auth/login/?next=... HTTP/1.1" 302 Found
原因分析
- 会话Cookie域名不匹配:Airflow默认将会话Cookie绑定到
localhost,使用公网IP访问时,浏览器无法识别并携带该Cookie,导致每次请求都触发重新授权,形成循环。 - API信任源未配置:Airflow 3.0.0的API服务器需要明确允许外部访问源,否则会拒绝跨域/非信任源的请求,引发重定向循环。
- UI配置接口权限限制:
/ui/config接口返回401,说明未开启UI配置暴露权限,导致页面加载时无法获取必要配置,触发重试逻辑。
解决方案
修改Docker Compose文件中的环境变量,添加以下配置项:
1. 调整会话Cookie相关配置
在x-airflow-common的environment区块中添加:
AIRFLOW__WEBSERVER__SESSION_COOKIE_DOMAIN: "22.193.38.155" AIRFLOW__WEBSERVER__SESSION_COOKIE_SECURE: "false" # HTTP访问设为false,HTTPS访问改为true AIRFLOW__WEBSERVER__SESSION_COOKIE_SAMESITE: "Lax"
2. 配置API信任源
同样在x-airflow-common的environment区块中添加:
AIRFLOW__API__ACCESS_CONTROL_ALLOW_ORIGIN: "http://22.193.38.155:8080" AIRFLOW__API__ACCESS_CONTROL_ALLOW_CREDENTIALS: "true"
3. 开启UI配置暴露
添加以下配置确保/ui/config接口可正常访问:
AIRFLOW__WEBSERVER__EXPOSE_CONFIG: "true"
4. 重启容器
修改完成后,执行以下命令重启所有Airflow容器:
docker compose down docker compose up -d
补充说明
如果后续改用域名访问,只需将SESSION_COOKIE_DOMAIN和ACCESS_CONTROL_ALLOW_ORIGIN中的公网IP替换为对应域名即可;若启用HTTPS,需将SESSION_COOKIE_SECURE设为true。
内容的提问来源于stack exchange,提问作者foxhq
相关产品推荐
相关产品推荐

