Nginx. Переопределить заголовок в кэшированном объекте, возможно ли это?

Nginx. Переопределить заголовок в кэшированном объекте, возможно ли это?

Моя команда использует nginx скэшПроблема в том, что приложение в восходящем потоке отправляет некоторые заголовки, которые мы хотели бы переопределить.в кэшированном объекте. Можно увидеть заголовки, сохраненные в кэшированном объекте, если поискать в кэше ключ (или часть ключа). Например

cd /var/cache/nginx/test
grep -inr part_of_key *
Binary file 6/29/7bcd0cd0aadfd536cdd7183cd8b77296 matches

тогда можно сделать

strings 6/29/7bcd0cd0aadfd536cdd7183cd8b77296
# content with keys, cached headers and so on

Конфигурация nginx (упрощенная)

# part of server1
  location / {
    proxy_pass            http://upstream;
    proxy_cache           zone1;
  }

Теперь я знаю директиву proxy_hide_headerи я пытался удалить (и заменить) заголовки в кэшированном объекте, но это не работает. Кажется, что процесс следующий:

  1. восходящий поток отправляет ответ
  2. nginx читает ответ
  3. ответ сохраняется в файле в кэше
  4. над ответом выполняются такие операции, как удаление заголовков, для отправки ответа клиенту

Поэтому, по-видимому, нет возможности повлиять на заголовки ответа до того, как он будет сохранен в кэше.

Один из обходных путей, который я мог бы разработать, — просто поместить в середину еще один сервер nginx, чтобы он мог изменять заголовки, которые затем сохранялись в кэше в server1.

Пример

# part of server1
  location / 
    proxy_pass            http://upstream-modify-headers;
    proxy_set_header      Host modify.headers;
    proxy_cache           zone1;
  }

# the upstream
upstream upstream-modify-headers {
  server 127.0.0.1:80;
}
#the host that modifies the headers
server {
  listen *:80;


  server_name           modify.headers;

      add_header "cache-control" "public, max-age=10, must-revalidate";

  ...

  location / {
    proxy_pass            http://upstream;
    proxy_hide_header     cache-control; #one example header that should be modified in the cache
  }
  ...
  allow 127.0.0.1; #only locally available
}

Это работает, но требует дополнительных хостов nginx.Можно ли вместо этого переопределить заголовки в кэшированном объекте на том же сервере nginx, не добавляя дополнительный объект в восходящем потоке?

решение1

Похоже, вы ищете proxy_hide_headerдирективу.

решение2

В качестве обходного пути попробуйте добавить метку даты в заголовках. Добавьте ее, и тогда вы сможете отличить, какие заголовки из кэша, а какие новые (сравнив журнал доступа с другими метками времени)

Связанный контент