Как указать nginx соблюдать кэш бэкенда? uWSGI

Есть аналогичный вопрос , но решение у меня не работает.

У нас есть рекламный бэкэнд nginx и uWSGI. Нам нужен nginx для кэширования ответа серверной части в соответствии с тем, что находится в заголовке ответа.

Например, я бегаюcurl -I https://example.com/api/project_data/. С использованиемtcpdumpЯ вижу, что серверная часть отвечает:

      HTTP/1.1 200 OK
Content-Type: application/json
Vary: Accept, Accept-Language, Origin
Allow: GET, HEAD, OPTIONS
Cache-Control: public, max-age=3600
X-Request-ID: 6aa...0d99
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Set-Cookie:  longterm_session=45c6...67; Domain=example.com;

Тем не менее, ответ не кэшируется, и nginx обращается к бэкэнду каждый раз при получении запроса.

Конфигурация nginx:

      http {
        uwsgi_cache_path /var/local/nginx_cache levels=2:2 use_temp_path=off inactive=1h keys_zone=mycache:20m ;
....

  server {
    ....
    uwsgi_cache mycache;
    uwsgi_cache_key "$request_method$request_uri";

    location /api/project_data/ {
      add_header X-Cache $upstream_cache_status;
      add_header Pragma "public";
      uwsgi_pass 127.0.0.1:49002;
      include uwsgi_params;

      uwsgi_cache mycache;
      uwsgi_cache_key "$request_method$request_uri";

    }

я продублировалuwsgi_cacheпросто на всякий случай, потому что некоторые директивы не наследуютсяlocation. Кроме того, естьx-cache: MISSв ответе, который nginx отправляет клиенту.

Что я делаю не так?

0 ответов

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