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

Пропуск кеширования PHP nginx для определенных областей сайта?

Я только что установил новый сервер с nginx (в котором я новичок) и PHP. На моем сайте существует по существу 3 разных типа файлов:

Это мое понимание от этот вопрос и эта страница что статические файлы не нуждаются в особой обработке и будут обрабатываться как можно быстрее.

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

location ~ \.php$ {
    try_files $uri =404;

    fastcgi_cache one;
    fastcgi_cache_key $scheme$host$request_uri;
    fastcgi_cache_valid  200 302 304 30m;
    fastcgi_cache_valid  301 1h;

    include /etc/nginx/fastcgi_params;
    fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /srv/www/example$fastcgi_script_name;
    fastcgi_param HTTPS off;
}

Однако теперь я хочу предотвратить кеширование на форуме (для всех или только для авторизованных пользователей - не проверял, возможно ли последнее с помощью программного обеспечения форума). Я слышал, что внутри локационных блоков находится фраза «if is evil», поэтому я не уверен, что делать дальше. С if внутри блока местоположения я бы, вероятно, добавил это посередине:

if ($request_uri ~* "^/forum/") {
    fastcgi_cache_bypass 1;
}
# or possible this, if I'm able to cache pages for anonymous visitors
if ($request_uri ~* "^/forum/" && $http_cookie ~* "loggedincookie") {
    fastcgi_cache_bypass 1;
}

Будет ли это работать нормально или есть лучший способ добиться этого?

Вы можете использовать, если в серверном блоке это совершенно безопасно. Рабочий пример с соответствующими строками:

server {
    listen   80;
...skip...
    if ($uri ~* "/forum" ) {set $no_cache 1;}
...skip...

    location ~ \.php$ {

        fastcgi_cache_bypass $no_cache;
        fastcgi_no_cache $no_cache;

      ...other fastcgi-php content...
}

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

location ~ ^/forum/.*\.php$ {
    // forum php setup here
}
location ~ \.php$ {
    // regular php setup here
}

Это не совсем СУХОЙ, но он прост и легко читается, когда вы вернетесь к нему через 6 месяцев.