
일부 응답을 캐시하기 위해 Nginx를 사용하고 있습니다. 이러한 응답을 생성하는 백엔드는 Cache-control
모든 응답에 대한 공통 헤더를 설정합니다. 그러나 일부 응답을 다른 응답보다 더 오랜 기간 동안 캐시해야 합니다. 즉, cache-control
지시문에서 헤더를 고려하기 전에 헤더 를 수정해야 합니다 proxy_pass
.
나는 를 사용하고 있으며 지시문을 사용하여 위치 블록 의 헤더를 ngx_lua_module
수정하고 싶습니다 . 의도한 구성은 다음과 같습니다.Cache-Control
internal
header_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;
}
}