nginx: Proxy_pass 지시문에 호스트에 URI 경로를 추가하는 방법은 무엇입니까?

nginx: Proxy_pass 지시문에 호스트에 URI 경로를 추가하는 방법은 무엇입니까?

문제:

  • 나는 nginx 지시문을 사용하여 URI의 특정 경로(예: )가 있는 요청을 리디렉션 proxy_pass합니다 .httpslocationhttps://domain/path/index.htmlhttp://container_ip:port/index.html
  • 이는 초기 요청에 잘 작동합니다.
  • 그러나 HTML 파일이 로드할 리소스를 지정하는 경우 클라이언트는 경로 없이 기본 URL만 사용하여 이러한 리소스를 검색합니다. 예에서는 https://domain/main.css.

질문:
이러한 리소스도 원래 경로에서 검색되도록 nginx를 구성하려면 어떻게 해야 합니까? 예에서 https://domain/path/main.css?

현재 잘못된 nginx 구성:

server {
    listen 443 ssl;
    server_name domain;

    [...]

    location /path/ {
        proxy_set_header Host $host;
        proxy_pass http://container_ip:port/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

답변1

리소스 경로는 애플리케이션에 의해 생성됩니다. 적절하고 안정적인 접근 방식은 올바른 경로로 리소스 URL을 생성하도록 애플리케이션을 수정하는 것입니다.

신뢰할 수 없는 솔루션을 원한다면 다음을 사용해 볼 수 있습니다.http://nginx.org/en/docs/http/ngx_http_sub_module.htmlnginx가 프록시하는 응답에서 리소스 URL을 대체합니다. 그러나 진단하기 어려울 수 있는 원치 않는 부작용이 발생할 가능성이 있습니다.

관련 정보