포트를 변경하기 위한 Nginx 역방향 프록시 기본 URI

포트를 변경하기 위한 Nginx 역방향 프록시 기본 URI

안녕하세요. 예를 들어 내 Nginx 기본 포트에 역방향 프록시를 사용하고 싶습니다.

http://example.com:443/ips/8443 -> http://example.com:8443/ips/8443
http://example.com:443/ips/23950 -> http://example.com:23950/ips/23950

이를 지원하면 훨씬 좋겠지만 필수사항은 아닙니다.

http://example.com:443/ips/23950/xyz -> http://example.com:23950/ips/23950/xyz

그리고 이건 내 구성이야

    location ~ /ips/([0-9]+)(/|)(\S+|)$ {
            proxy_pass http://127.0.0.1:$1/$3;
    }

nginx의 REGEX를 제대로 이해하지 못하지만 최선을 다했다고 말할 수 있습니다.

답변1

이 문제를 해결하려면 프록시 요청에 전체 URL 경로를 포함하도록 Proxy_pass 지시문을 업데이트해야 합니다. 이는 수신 요청의 전체 URL 경로가 포함된 $request_uri 변수를 사용하여 수행할 수 있습니다.

다음은 업데이트된 Proxy_pass 지시문의 모양에 대한 예입니다.

proxy_pass http://127.0.0.1:$1$request_uri;

그러면 들어오는 요청의 전체 URL 경로와 함께 요청이 로컬 포트로 전달됩니다. 따라서 /ips/23950/xyz에 대한 요청은 다음으로 프록시됩니다.http://127.0.0.1:23950/xyz, 로컬 서버에서 요청을 올바르게 처리할 수 있어야 합니다.

또한 Proxy_pass 지시문을 포함하는 위치 블록은 위치 /ips 블록 내부의 유일한 블록이어야 한다는 점도 주목할 가치가 있습니다. 이는 위치 블록이 순서대로 처리되고 외부 위치 블록의 return 404 문으로 인해 내부 위치 블록과 일치하는 요청이 처리되지 않기 때문입니다. 따라서 포트 번호가 있는 URL과 일치하는 위치 블록 내에서 404 반환 문을 이동하고 403을 반환하거나 요청된 URL이 허용되지 않음을 나타내는 다른 오류 코드로 변경해야 합니다.

업데이트된 구성의 예는 다음과 같습니다.

location ~ ^/ips/([0-9]+) {
    proxy_redirect off;
    proxy_pass http://127.0.0.1:$1$request_uri;
    proxy_http_version 1.1;
   

관련 정보