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.

Другие вопросы по тегам