# Apache Airflow - Workflow Orchestration # Subpath: /airflow # Backend: airflow-webserver:8080 location /airflow { # Remove /airflow prefix before forwarding rewrite ^/airflow(/.*)$ $1 break; # Forward to Airflow Webserver proxy_pass http://airflow-webserver:8080; # Preserve headers proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; 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; # Important for Airflow subpath proxy_set_header X-Script-Name /airflow; # Session cookie handling proxy_cookie_path / /airflow/; # WebSocket support for real-time logs proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # Timeouts (DAG runs can take time) proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; # Buffer settings proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; } # API endpoints location /airflow/api { rewrite ^/airflow(/.*)$ $1 break; proxy_pass http://airflow-webserver:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Script-Name /airflow; proxy_cookie_path / /airflow/; } # Static files location /airflow/static { rewrite ^/airflow(/.*)$ $1 break; proxy_pass http://airflow-webserver:8080; proxy_set_header Host $host; proxy_cache_valid 200 1d; add_header Cache-Control "public, immutable"; } # Health check location /airflow/health { rewrite ^/airflow(/.*)$ $1 break; proxy_pass http://airflow-webserver:8080; proxy_set_header Host $host; }