VovansystemS
December 26, 2013 01:20PM
> Лучше ещё переделать конфиг так, чтобы fastcgi_cache был включён
> только там, где используется.
>
> Ибо если кеш выключен - это одно, а если он включён, но ему
> сказали bypass / no cache - это немного другое. В частности, при
> обработке HEAD-запросов, а равно условных запросов будут различия
> (при включённом кеше на бекенд вместо HEAD уйдёт GET, а If-*
> заголовки будут убраны).
интересно, будем иметь в виду

>> А вот как убирать слэши в конце URI без rewrite я не смог придумать [..]
> Такие вещи лучше всего делать внутри приложения, а не на конфигах
> nginx'а.
хорошо, переделаем при возможности

>> Также не совсем понятно, как избавится от if, когда на то, нужно ли
>> кешировать (отдавать закешированный) контент, влияет несколько
>> факторов (есть ли определённая кука ИЛИ метод запроса post ИЛИ есть
>> аргументы (например)). Возможно ли и стоит ли переписать это на map'ы
>> и как это будет выглядеть? Как бы сделали Вы?
>
> И такие вещи лучше всего делать в рамках приложения, возвращая
> корректные значения Cache-Control.
>
> Впрочем, если речь идёт про fastcgi_no_cache /
> fastcgi_cache_bypass, то следует иметь ввиду, что эти директивы
> принимают несколько параметров. [..]
о, действительно, надо ещё раз перечитать документацию по модулю, т.к.
за последние годы появилось много очень удобных и полезных директив, а
я по-инерции продолжаю использовать костыли и воркэраунды от ранних
версий, да ещё и исправленые множество раз, которые содержат
логические ошибки, как показал Валентин.

>> не кешируем POST
> http://nginx.org/r/fastcgi_cache_methods/ru
спасибо!

> Обращаю ваше внимание на то, что вы таким образом разрешаете
> кешировать POST запросы по https с аргументами. Сомневаюсь,
> что именно такая логика вам была нужна.
действительно, а ведь в одной продакшн системе так и крутится - пойду
исправлять - спасибо!

> Скорее всего вы хотите:
> map $args $empty_args {
> default 0;
> "" 1
> }
> fastcgi_no_cache $empty_args $https $cookie_auth_user $cookie_login .. ;
да, именно так и требовалось

в данном же конкретном случае нужно кешировать ответы безотносительно
того, имеет ли запрашиваемая страница аргументы или нет. поэтому
конечный конфиг будет выглядеть как-то так (без map, а на других
проектах оно будет использоваться), но мы будем учитывать те
рекоммендации, которые дал Максим. Всем огромное спасибо, я многое
сегодня понял.

fastcgi_cache_path /run/shm/MAIN levels=1:2 keys_zone=MAIN:64m
max_size=100m inactive=240h;

server {
listen 80;
server_name domain.com;
error_log /var/log/nginx/domain.error.log error;
access_log /var/log/nginx/domain.access.log;

root /home/user/domain.com/public_html/;

include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME /public_html/index.php;
fastcgi_param DOCUMENT_ROOT /public_html;
fastcgi_param KOHANA_ENV production;

# отдаём некешированную страницу и не помещаем такую страницу в кеш,
# если значение хотя бы одного из строковых параметров непустое и
не равно "0"
fastcgi_no_cache $https $cookie_login $cookie_auth_user;
fastcgi_cache_bypass $https $cookie_login $cookie_auth_user;

fastcgi_cache_revalidate on;

fastcgi_temp_path /run/shm/fcgi 1 2;
fastcgi_cache MAIN;
fastcgi_cache_key "$scheme|$request_method|$host|$request_uri";

fastcgi_cache_methods GET HEAD; # Если метод запроса клиента
указан в этой директиве, то ответ будет закэширован
fastcgi_ignore_headers "Cache-Control" "Expires" "Set-Cookie";
fastcgi_cache_valid 20m;
fastcgi_cache_valid any 10s;
fastcgi_cache_use_stale updating error timeout invalid_header http_500;

rewrite ^/(.*)/$ /$1 redirect; # все URI должны быть без слэша на конце

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

location ~* "^/(admin|search)(/.*$|/$)" {
fastcgi_cache off;
fastcgi_pass 127.0.0.1:9001;
}

location ~* "^/(news|feed)(.*$|/$)" {
fastcgi_cache_valid 10m;
fastcgi_pass 127.0.0.1:9001;
}

location = /index.php {
fastcgi_pass 127.0.0.1:9001;
}

# все остальные .php файлы
location ~* \.php$ { return 403; }

# статика
location ~*
^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|docx)$
{
expires 60d;
access_log off;
}
}
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

как лучше управлять кешированием fastcgi_cache

VovansystemS December 26, 2013 04:18AM

Re: как лучше управлять кешированием fastcgi_cache

Maxim Dounin December 26, 2013 07:30AM

Re: как лучше управлять кешированием fastcgi_cache

VovansystemS December 26, 2013 10:16AM

Re: как лучше управлять кешированием fastcgi_cache

Maxim Dounin December 26, 2013 10:44AM

Re: как лучше управлять кешированием fastcgi_cache

VovansystemS December 26, 2013 01:20PM

Re: как лучше управлять кешированием fastcgi_cache

S.A.N December 29, 2013 01:04AM

Re: как лучше управлять кешированием fastcgi_cache

Валентин Бартенев December 26, 2013 10:52AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 240
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready