Work/개발 노트

[nginx] 정규표현식으로 패턴 매치 후 proxy pass 시 쿼리 파라미터 포함하기

★용호★ 2020. 9. 28. 13:49

Nginx를 사용하면서 패턴에 매치하는 Request를 Proxy pass로 전달 할 때 쿼리 파라미터가 포함되지 않아 어플리케이션 레벨의 문제인 것으로 생각하고 한참을 고생했다.  여기서 쿼리 파라미터는 아래 예로 든 주소에서 물음표(?) 뒤에 오는 키-값들을 의미한다.

https://yongho1037.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F

 

문제가 되었던 nginx 설정은 다음과 같다.

 

location ~ /(api|login|auth)/(.*)$ {
  proxy_pass http://backend/$1/$2;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_redirect off;
}

 

위 설정은 URL Path에 api, login, auth가 포함되어 있으면 backed 서버로 proxy pass 하고자 하는 설정이었다. 이 때 괄호안의 정규 표현식을 사용한 부분을 추출하여 $1,$2와 같이 인자 값으로 참조할 수가 있는데 이 때 (.*)&로 하면 쿼리 파라미터까지 포함되는 것으로 생각했었다. 하지만 이 경우에는 Path에 해당하는 부분까지만 포함이 되고, 쿼리 파라미터 부분은 아래와 같이 ${args}를 추가하여 설정해야 한다.

 

location ~ /(api|login|auth)/(.*)$ {
  proxy_pass http://backend/$1/$2?${args};
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_redirect off;
}