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

Nginx останавливает proxy_cache при осаде или с помощью запроса curl, когда кеш страницы устарел

Я пытаюсь обслуживать страницу индекса с помощью nginx, используя его функции proxy_cache. При обычном просмотре с браузерами все работает нормально. Но когда я пытаюсь получить содержимое страницы с помощью curl или когда использую siege на странице индекса, nginx начинает работать не так, как я ожидал. Он передает запрос в apache, когда кеш страницы устарел.

Я не могу понять, почему nginx не создает новый кеш страницы индекса, когда он был запрошен с помощью curl или siege?

Вот часть nginx.conf:

    proxy_cache_path /var/cache/nginx levels=2 keys_zone=pagecache:100m inactive=1m max_size=500m;

    location = / {
            set $o_uri $request_uri;

            if ( $http_cookie !~ "mytestcookie" ) {
                    rewrite ^ /ng_cache last;
            }

            proxy_pass http://127.0.0.1:88;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /ng_cache {
            internal;

            root /home/$host/www;

            proxy_cache             pagecache;
            proxy_cache_valid       200 301 302 304 1m;
            proxy_hide_header       "Set-Cookie";
            proxy_ignore_headers    "Cache-Control" "Expires";

            proxy_pass              http://127.0.0.1:88$o_uri;
            proxy_set_header        Host             $host;
            proxy_set_header        X-Real-IP        $remote_addr;
    }

В proxy_hide_header Set-Cookie строка в вашей конфигурации предполагает, что ваш бэкэнд возвращает заголовок Set-Cookie, который не позволит nginx кэшировать такой ответ по умолчанию. Вероятно, вы захотите добавить Set-Cookie в proxy_ignore_headers в вашей конфигурации:

proxy_ignore_headers    Cache-Control Expires Set-Cookie;

Видеть документы для подробностей.