• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

Reverse Proxy와 주요 nginx 웹서버 설정 익히기 3 문의요

23.08.27 00:37 작성 조회수 359

0

안녕하세요?

 

혼자 해결 못한 부분이 나중에 해야지.. 해놓고 몇 년 째 괴롭혀서 다시 왔습니다.

 

Reverse Proxy와 주요 nginx 웹서버 설정 익히기 3

 

6분 35초에

13.209.45.243/blog/test.html이

프록시패스를 통해서 nginx에 접속이 되는데

그 때

주소가 13.209.45.243 이고

$1 부분 때문에

13.209.45.243/test.html 이렇게 되는거라고

즉 /blog가 없어지는거라고 하셨는데요

 

그런데 왜 결국 접속은

13.209.45.243/test.html 이렇게 하면 안되고

주소/blog/

주소/comm/

이렇게 해야 하나요?

물론 test.html은 없고 예를 들어 설명하신거지만

 

$1이 어떻게 작용하는건지 한국말로 정리가 안되는게

없어진다라는 표현을 들어서 그러는 것 같은데요

혹시 진짜 없어진다는 표현이 맞는건지요?

 

이게 몇 년 째 자다가도 꿈에나오고 궁금해 죽겠어서요

제가 아는 한국말로 정리가 안되네요..

 

이 정리 안되는 부분이 어디였는지 기어코 찾아내서 다시 내가 아는 한국말로 정의 내리려고 고심하다가 결국 정리가 안돼서 문의남깁니다.

답변 1

답변을 작성해보세요.

0

안녕하세요. 답변 도우미입니다. 질문이 사실 정확히... 이해를 저희가 한 것인지 조금 걱정이 되는데요. 최대한 의견을 드립니다.

Reverse Proxy와 관련된 nginx 설정에 대한 질문을 이해했습니다. $1은 정규 표현식에서 사용되는 캡처 그룹을 나타냅니다. 이것이 어떻게 동작하는지에 대한 설명을 한국어로 제공드리겠습니다.

먼저, nginx 설정에서 특정 경로를 프록시 패스로 리디렉션하거나 변환할 때 정규 표현식을 사용할 수 있습니다. 이때, ()를 사용하여 캡처 그룹을 정의할 수 있습니다.

예를 들어서, 아래와 같은 설정이 있다고 가정해봅시다.

location ~ ^/blog/(.*)$ {

    proxy_pass http://backend/$1;

}

여기서 ^/blog/(.*)$는 "/blog/"로 시작하고 그 뒤에 어떤 문자열이든 오는 URL을 매치합니다. (.*?) 부분은 캡처 그룹이며, 이 캡처 그룹은 해당 위치의 문자열을 잡아둡니다. 그리고 이 값을 $1로 참조할 수 있습니다.

따라서 13.209.45.243/blog/test.html로 요청이 들어왔을 때 ^/blog/(.*)$의 정규 표현식에 의해 test.html이 캡처되고, proxy_pass 지시어에서 $1로 이 값을 참조합니다. 그래서 실제로 백엔드에는 http://backend/test.html 요청이 전달되게 됩니다.

즉, "없어진다"라는 표현은 /blog/ 경로 부분이 proxy_pass에서는 사용되지 않는다는 의미입니다. 그 대신 $1로 캡처된 값을 사용하여 백엔드 서버에 전달됩니다.

13.209.45.243/test.html로 직접 접속하면 안 되는 이유는 nginx 설정에서 ^/blog/(.*)$라는 패턴만을 감지하기 때문입니다. 즉, /blog/가 없으면 해당 설정에 의해 처리되지 않습니다.

정리하면, $1/blog/ 뒤의 URL 부분을 참조하여, 이 값을 백엔드 서버로 전달하는 데 사용됩니다. /blog/는 실제 백엔드 요청에서는 제거되어 사용되지 않습니다.

이렇게 이해하시면 어떠실까요?

감사합니다.