Nginx - 다른 내부 위치 블록으로 Proxy_pass

Nginx - 다른 내부 위치 블록으로 Proxy_pass

일부 응답을 캐시하기 위해 Nginx를 사용하고 있습니다. 이러한 응답을 생성하는 백엔드는 Cache-control모든 응답에 대한 공통 헤더를 설정합니다. 그러나 일부 응답을 다른 응답보다 더 오랜 기간 동안 캐시해야 합니다. 즉, cache-control지시문에서 헤더를 고려하기 전에 헤더 를 수정해야 합니다 proxy_pass.

나는 를 사용하고 있으며 지시문을 사용하여 위치 블록 의 헤더를 ngx_lua_module수정하고 싶습니다 . 의도한 구성은 다음과 같습니다.Cache-Controlinternalheader_filter_by_lua_block

location / {
    proxy_pass /actual;
    proxy_cache something;
}

location = /actual {
    internal;
    proxy_pass https://backend;
    proxy_cache off;
    header_filter_by_lua_block {
        -- modify cache-control header based on request/response parameters
    }
}

그러나 .NET을 통해 내부 리디렉션을 수행하는 방법을 찾을 수 없었습니다 proxy_pass. 이 작업을 수행하는 데 필요한 통찰력에 감사드립니다.

답변1

proxy_pass위치로는 이동할 수 없으며 proxy_pass업스트림 또는 URL(기본적으로 선언되지 않은 업스트림)로만 이동할 수 있습니다. 따라서 귀하의 질문에 공식적으로 답변해야 합니다 proxy_pass.로컬호스트호스트 헤더가 현재로 설정되어 있습니다 server_name. 그러나 이것은 아마도 일을 지나치게 복잡하게 만들 것입니다.

대신에location / {}- 필요하지 않은 을 제거한 다음 이름을 location = /actual으로 바꾸면 됩니다 location / {}.

또한 lua가 전혀 필요하지 않다고 말하고 싶습니다. 프록시된 웹에서 가져오는 헤더를 제거 proxy_hide_header하고 add_header.

답변2

일반적으로 제어권을 다른 위치 블록으로 전달하려면 내부 리디렉션(고쳐 쓰기), 아니다 proxy_pass:

location / {
    rewrite ^.*$ /actual;
}

업스트림 헤더를 수정하려면 다음을 사용할 수 있습니다.프록시_세트_헤더:

location /actual {
    proxy_set_header Cache-Control '<your value>';
}

다운스트림 헤더를 수정하려면 다음을 사용할 수 있습니다.more_set_headers. 추가 모듈이 포함된 사용자 정의 Nginx 빌드가 필요하지만 귀하의 경우에는 정말 강력합니다.

location /actual {
    more_set_headers 'Cache-Control: <your value>';
}

질문 제목을 고려하면 클라이언트 트래픽을 처리하기 위해 서버를 전환하는 것과 같은 하드코어한 작업을 만들 수도 있습니다. 이러한 사소한 작업에는 권장하지 않지만 드문 경우에는 도움이 될 수 있습니다.

http {

    upstream internal_http_routing {
        server         unix:var/internal.sock;
    }

    server {
        # Internal interface
        listen         unix:var/internal.sock;

        location / {
            return     200;
        }
    }

    server {
        # Client-facing interface
        listen         443 ssl;

        location / {
            proxy_pass http://internal_http_routing;
        }
    }

}

tcp {

    upstream internal_tcp_routing {
        server         unix:var/internal.sock;
    }

    server {
        # Client-facing interface
        listen         8443 ssl;
        proxy_pass     internal_tcp_routing;
    }

}

관련 정보