grabbee
@grabbee

Как понять что просходит с заголовками в NGINX при проксировании?

В контроллере аннотация
@Cache(expires="+30 sec", public=true)


Симфони отдает заголовок

Expires: Thu, 08 Sep 2022 20:09:52 GMT


запрос

User-Agent: PostmanRuntime/7.29.2
Accept: */*
Postman-Token: b453f0e4-9cc7-49ed-9a6f-a2de9ed1ead1
Host: 127.0.0.1:8081
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

ответ

Host: 127.0.0.1:8081
Date: Thu, 08 Sep 2022 20:09:23 GMT
Connection: close
Content-Type: image/png
Cache-Control: public
Date: Thu, 08 Sep 2022 20:09:22 GMT
Expires: Thu, 08 Sep 2022 20:09:52 GMT
X-Debug-Token: e7d7cc
X-Debug-Token-Link: 127.0.0.1:8081/_profiler/e7d7cc
X-Robots-Tag: noindex


Дальше это получает NGINX - и происходит магия.

expires: -1


конфиг

server {
listen 80;
server_name _;

root /app/public;
index index.php;

location / {
include proxy_params;

proxy_cache CACHE_DEFAULT;
proxy_pass backend;
}
}

proxy_params

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_hide_header set-cookie;

proxy_ignore_headers
Set-Cookie;

proxy_buffering on;
proxy_buffers 16 4k;
proxy_buffer_size 4k;

proxy_cache_valid 200 1d;
proxy_cache_valid 302 1d;
proxy_cache_valid 404 5m;

proxy_cache_use_stale error timeout invalid_header updating
http_500 http_502 http_503 http_504;

Server: nginx
Date: Thu, 08 Sep 2022 19:51:20 GMT
Content-Type: image/png
Transfer-Encoding: chunked
Connection: keep-alive
Host: 127.0.0.1:8001
Cache-Control: public
pragma: no-cache
expires: -1 
X-Debug-Token: 7c510a 
X-Robots-Tag: noindex


Как и почему expires стал 1 ? Я же ему отправил значение из Симфони
  • Вопрос задан
  • 143 просмотра
Пригласить эксперта
Ответы на вопрос 1
phoinixrw
@phoinixrw
Архитектор информационных систем
Нет никакой магии.
При использовании прокси серверов всегда нужно четко определять, что бекенд говорит прокси, а что клиенту.
А говорить он может в общем-то через заголовки, то есть какие-то заголовки предназначаются для прокси, а какие-то дальше клиенту.
Так вот, заголовок Expires в вашем случае предназначен для прокси, для директивы proxy_cache, а именно, на какое время кешировать, так как вы не указали его в proxy_ignore_headers.

Почему он его изменяет на -1?
Потому, что у вас в заголовке от бекенда отсутствует длинна ответа: Content-Length, а ответ передается частями до просветления. Ну там есть особенности с этим, да.

В общем, если хотите отдать Expires клиенту, то добавьте этот заголовок в proxy_ignore_headers, если он не для прокси, либо добавьте директиву expires off;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы