Nginx — proxy_pass в другой внутренний блок местоположения
Я использую Nginx для кэширования некоторых ответов. Серверная часть, генерирующая эти ответы, устанавливает общийCache-control
заголовок для всех ответов. Однако мне нужно кэшировать некоторые ответы на более длительный срок, чем другие. То есть мне нужно изменитьcache-control
заголовок, прежде чем он будет принят во внимание директивой.
я использую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
}
}
Однако я не мог найти способ добиться этого внутреннего перенаправления черезproxy_pass
. Я был бы признателен за любую информацию, которая у вас есть, чтобы сделать эту работу.
1 ответ
Вы не можете перейти к местоположению, вы можете только к восходящему каналу или URL-адресу (который в основном не объявлен вышестоящему). Итак, отвечая на ваш вопрос формально, вам следуетproxy_pass
на localhost с текущим заголовком Hostserver_name
; но это, вероятно, слишком усложнит ситуацию.
Вместо этого - похоже, все, что вам нужно сделать, это избавиться от того, что вам не нужно, а затем переименоватьlocation = /actual
кlocation / {}
.
Я бы также сказал, что вам вообще не нужен Lua - просто удалите заголовок, который вы получаете из прокси-сети, с помощьюproxy_hide_header
и добавьте свой собственный с помощьюadd_header
.