NGINX URI 경로 값을 proxy_pass에 전달하기

ghwany·2021년 6월 18일
0

nginx

목록 보기
1/2

URI 경로 중 일부 값을 proxy_pass에 변수처럼 전달할 수 있다!

웹으로 RDP/VNC 원격제어 개발 중 VNC WS(Websocket) M/W(MiddleWare) 오픈소스인 noVNC 사용할 때 였습니다.
VNC서버의 RFB 프로토콜 메시지를 WS으로 웹브라우저에 전달해주는 M/W 입니다.
VNC서버와 1:1 연결로 N개의 VNC서버를 연결해야 한다면 N개의 M/W 프로그램을 실행해야 하는데 29000포트로 M/W를 실행하면 http://localhost:29000 URL로 원격제어가 가능했습니다.

DB에 저장된 원격제어 정보로 M/W 프로세스를 실행하고 iframe에 해당 URL로 제어하려 했으나...
당시 적용된 cors 정책에 M/W 포트를 모두 추가할 수는 없었고
보안상 NGINX에 등록한 인증서로 HTTPS 통신 했어야 했기에

http://localhost:29000 # 이 URL을
https://localhost/vnc/29000 # 이렇게 바꿔 매칭하고자 했습니다.

location을 정규식으로 작성할 때 패턴 그룹을 proxy_pass에 활용할 수 있습니다.

예제 설정

location ~* "^/vnc/(?<vnc_port>[0-9]+)/(?<others>.*)$" {
    proxy_pass http://127.0.0.1:${vnc_port}/${others}$is_args$args;
    proxy_redirect off;
    proxy_buffering off;

    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_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
}

(?<vnc_port>[0-9]+) 부분에서 ?<vnc_port>는 패턴 그룹의 이름(변수명)입니다.
proxy_pass에서 ${vnc_port}로 패턴 그룹에 매칭된 값을 전달할 수 있습니다.
만약 패턴 그룹의 이름을 지정하지 않고 사용하고 싶다면 왼쪽 기준부터 순서대로 $1 $2 $3 ...으로 사용할 수 있습니다.

성능상 TPS요구조건이 높은 곳에서는 권장하진 않으니 적절히 활용하는게 중요합니다.

profile
개발이 하고싶다

0개의 댓글