Назад | Перейти на главную страницу

Nginx не обрабатывает директивы proxy_hide_header и proxy_ignore_header

У меня проблемы с попыткой заставить Nginx игнорировать и скрывать некоторые заголовки с прокси-сервера.

Я хочу, чтобы Nginx скрывал и игнорировал заголовки «Cache-Control» и «Server», но это не сработало, я не знаю почему.

Мой conf выглядит следующим образом:

location / {
    proxy_pass http://111.131.50.42;
    proxy_hide_header Cache-Control;
    expires 60M;
    add_header Cache-Control "public";
    proxy_ignore_headers Cache-Control;
    proxy_hide_header Cache-Control;
    access_log off;
}

Но даже при этом я все еще получаю исходные заголовки «Cache-Control» и «Server».

Вы знаете, что я делаю не так?

P.S. Я не могу использовать модуль ngx_headers_more. Я не могу добавить этот модуль в нашу установку Nginx.

Директива proxy_ignore_headers указывает nginx игнорировать содержимое специальных заголовков, ведущих к определенному внутреннему поведению:

«X-Accel-Expires», «Expires», «Cache-Control», «Set-Cookie» и «Vary» задают параметры кеширования ответов;

«X-Accel-Redirect» выполняет внутреннее перенаправление на указанный URI;

«X-Accel-Limit-Rate» устанавливает лимит скорости передачи ответа клиенту;

«X-Accel-Buffering» включает или отключает буферизацию ответа;

«X-Accel-Charset» устанавливает желаемую кодировку ответа.

Если вы хотите скрыть заголовки от вышестоящих серверов, вам необходимо использовать proxy_hide_header. В Server заголовок не передается в ответ, отправленный клиенту по умолчанию, поскольку Date, X-Pad, и X-Accel-... заголовки.

Итак, это должно работать:

location / {
    access_log off;
    add_header Cache-Control "public";
    proxy_pass http://111.131.50.42;
    proxy_hide_header Cache-Control;
    expires 60M;
}  

Убедитесь, что вы не тестируете браузер с уже кэшированными данными, используйте curl.