Кэш FastCGI всегда показывает MISS

Вопрос или проблема

Я настроил кэш FastCGI для моего сервера, работающего на nginx и wordpress, используя этот гид. Похоже, кэш всегда пропускается. Конкретная конфигурация сервера приведена ниже. Что я упустил?

server {
    server_name <siteurl>;
    root /var/www/html/<siteteurl>;
    client_max_body_size 256M;

    index maintanence.html index.php index.html index.htm;

    ### Favicon
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    ### Robots.txt
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    set $skip_cache 0;

    # POST запросы и URL с параметрами запроса всегда должны идти к PHP
    if ($request_method = POST) {
        set $skip_cache 1;
    }
    if ($query_string != "") {
        set $skip_cache 1;
    }

    # Не кэшировать uri, содержащие следующие сегменты
    if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml|/.*sitemap.*\.(xml|xsl)") {
        set $skip_cache 1;
    }

    # Не использовать кэш для вошедших пользователей или недавних комментаторов
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
        set $skip_cache 1;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php-fpm.sock;

        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;

        fastcgi_cache phpcache;
        fastcgi_cache_valid 200 301 302 60m;
        fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
        fastcgi_cache_min_uses 1;
        fastcgi_cache_lock on;
        fastcgi_hide_header Pragma;
        fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
        add_header X-FastCGI-Cache $upstream_cache_status;
        add_header Cache-Status $skip_cache;
    }

    location ~ /\.ht {
        deny all;
    }

    listen 443 ssl; # управляется Certbot
    ssl_certificate /etc/letsencrypt/live/<siteteurl>/fullchain.pem; # управляется Certbot
    ssl_certificate_key /etc/letsencrypt/live/<siteteurl>/privkey.pem; # управляется Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # управляется Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # управляется Certbot
}
server {
    if ($host = <siteteurl>) {
        return 301 https://$host$request_uri;
    } # управляется Certbot

    listen 80;
    server_name <siteurl>;
    return 404; # управляется Certbot
}

.

Ответ или решение

При настройке кеширования FastCGI на сервере с использованием Nginx и WordPress, если вы постоянно наблюдаете статус CACHE MISS, необходимо провести детальное разбирательство этой ситуации. Мы рассмотрим возможные причины и предложим решения на основе вашего текущего конфигурационного файла.

1. Анализ конфигурации сервера

Ваша конфигурация включает несколько ключевых условий, которые могут привести к тому, что кеш всегда будет реагировать статусом MISS.

1.1 Условия для пропуска кеша

Вы указали несколько условий, при которых кеширование отключается:

  • POST-запросы и URL с query string: У вас установлено условие, что при POST-запросах и запросах с параметрами пропуск кеша происходит всегда.
  • Пути, не подлежащие кешированию: Проверка на наличие различных компонентов в request_uri, таких как /wp-admin/, /xmlrpc.php, и других URL, связанных с управлением контентом или комментариями.
  • Куки для авторизованных пользователей: Если в куках содержатся определенные значения, пропуск кеша также срабатывает.

Эти условия вполне разумны, но в некоторых случаях могут быть излишне строгими. Например, если вы делаете GET-запросы с параметрами, они тоже будут пропускать кеш.

Рекомендация: Проверьте, действительно ли ваш сайт отправляет запросы с параметрами. Если это не критично, рассмотрите возможность пересмотра условий, связанных с query_string.

2. Заголовки и количество суммарных попыток кеша

2.1 Директивы fastcgi_cache_bypass и fastcgi_no_cache

В вашей конфигурации fastcgi_cache_bypass и fastcgi_no_cache установлены на $skip_cache, что означает, что при выполнении перечисленных выше условий кеш всегда будет пропускаться. Убедитесь, что эти условия действительно необходимы.

Рекомендация: Возможно, вам стоит упростить логику условий или добавить более специфичные правила для кеширования.

3. Надежность кеша

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

3.1 Проверьте настройки кеша

Убедитесь, что кеш действительно включен и функционирует. Для этого можно использовать команду:

sudo nginx -t

Эта команда проверит конфигурационные файлы на наличие ошибок.

3.2 Директория для кеша

Проверьте, задана ли директория для хранения кеша. Она должна быть доступна для записи процессу Nginx. Например:

fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2 keys_zone=phpcache:10m max_size=10g inactive=60m use_temp_path=off;

4. Логи сервера

Обязательно просмотрите логи Nginx. Логи доступа и ошибки могут дать очень полезную информацию о том, почему кеш не сохраняется. Вы можете использовать команды:

tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log

5. Тестирование кеша

После внесения изменений в конфигурацию, убедитесь, что вы тестируете кеширование правильно. Применение инструмента для анализа заголовков HTTP, например, curl, поможет вам увидеть статус кеша:

curl -I http://<siteurl>

Обратите внимание на заголовок X-FastCGI-Cache, который должен отображать статус HIT, если кеширование работает корректно.

Заключение

Чтобы исправить проблему с постоянным статусом CACHE MISS, вам необходимо:

  1. Провести анализ и возможную оптимизацию условий кеширования.
  2. Убедиться, что кеш правильно настроен и доступен для записи.
  3. Проверить логи на наличие ошибок.
  4. Тестировать изменения и проверки статусов кеша.

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

Оцените материал
Добавить комментарий

Капча загружается...