작성
·
510
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/
는 실제 백엔드 요청에서는 제거되어 사용되지 않습니다.
이렇게 이해하시면 어떠실까요?
감사합니다.