Airflow를 ALB 뒤 /batch 경로에서 서비스하기: 301 Redirect 해결과 Nginx 리버스 프록시 구성 방법

개요

Apache Airflow는 강력한 워크플로우 스케줄링 도구이지만, ALB 뒤에서 특정 서브 경로(/batch)로 접근하려고 할 경우 예상치 못한 문제들이 발생할 수 있습니다. 본 포스트에서는 ALB → Nginx → Airflow 구조에서 301 Redirect 문제를 해결하고 /batch 경로로 안정적으로 서비스한 실제 사례를 공유합니다.


구성 개요

  • ALB: 사용자로부터의 요청을 수신하고, EC2 인스턴스의 Nginx(8080 포트)로 전달
  • Nginx: /batch 경로를 감지하고 내부 포트 10080에서 실행 중인 Airflow Webserver로 리버스 프록시 전달
  • Airflow Webserver: 루트(/) 경로 기준으로 동작

문제 발생

초기 구성은 다음과 같았습니다:

  • Airflow Webserver는 -url-prefix /batch로 설정
  • ALB에서 https://domain.com/batch 요청을 8080 포트로 전달
  • Airflow 설정은 다음과 같이 구성:
airflow webserver \\
  --port 10080 \\
  --url-prefix /batch

그럼에도 불구하고 웹 접근 시 다음과 같은 문제가 발생:

🔁 301 Moved Permanently

요청한 /batch가 루트(/)로 리다이렉션되어 Airflow UI가 제대로 로드되지 않음

이는 Airflow 내부에서 정적 리소스 경로나 링크가 여전히 /를 기준으로 생성되기 때문에 발생한 현상입니다.


해결 방법: Nginx 리버스 프록시 도입

Airflow가 루트(/)에서 동작한다고 속이기 위해, Nginx를 리버스 프록시로 활용하였습니다.

변경된 구성

구성 요소포트설명
ALB외부 사용자 → 8080/batch 요청을 전달
Nginx8080/batchlocalhost:10080으로 프록시
Airflow10080루트(/)에서 실행됨

Nginx 설정 예시

server {
    listen 8080;
    server_name domain.com;

    location /batch/ {
        proxy_pass <http://localhost:10080/>;
        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;

        # /batch를 제거하여 Airflow는 루트로 인식하게 함
        rewrite ^/batch/(.*)$ /$1 break;
    }
}

이 설정을 통해 /batch로 접속된 모든 요청은 내부적으로 /로 전달되며, Airflow는 이를 루트 경로 요청으로 인식합니다.


결과

  • https://domain.com/batch 접속 시 Airflow UI가 정상적으로 표시됨
  • 리다이렉션 없이 정적 리소스, URL 모두 정상 처리됨
  • Nginx 로그 및 Airflow 로그에서도 오류 없이 경로 일치 확인

교훈 및 정리

Airflow는 기본적으로 / 경로에 강하게 의존하기 때문에, ALB나 프록시 뒤에서 경로 기반 라우팅을 사용하려면 다음 사항을 유의해야 합니다:

  1. Airflow에 -url-prefix를 지정해도 완전한 경로 처리 대응이 되지 않는다.
  2. /batch처럼 경로가 분기된 경우에는 중간에 Nginx 같은 리버스 프록시를 둬서 rewrite 처리를 해야 한다.
  3. ALB는 Nginx와 함께 사용할 때 더욱 유연하게 경로 라우팅이 가능해진다.

참고 자료


마무리

다중 서비스가 하나의 도메인에서 운영되는 환경에서, 특정 경로(/batch)에 Airflow를 안전하게 배치하려면 Nginx를 통한 경로 재작성이 효과적인 방법입니다. WordPress나 여러 SaaS 환경에서도 유사한 문제가 발생할 수 있으니, 리버스 프록시 구조를 염두에 두고 설계하는 것이 좋습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다