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.