Re: как лучше управлять кешированием fastcgi_cache
Валентин Бартенев
vbart at nginx.com
Thu Dec 26 15:50:09 UTC 2013
On Thursday 26 December 2013 18:14:05 VovansystemS wrote:
[..]
> Также не совсем понятно, как избавится от if, когда на то, нужно ли
> кешировать (отдавать закешированный) контент, влияет несколько
> факторов (есть ли определённая кука ИЛИ метод запроса post ИЛИ есть
> аргументы (например)). Возможно ли и стоит ли переписать это на 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/;
>
> set $no_cache 0;
> if ($request_method = POST) {
> set $no_cache 1; # не кешируем POST
http://nginx.org/r/fastcgi_cache_methods/ru
> }
> if ($https = on) {
> set $no_cache 1; # не кешируем https
> }
> if ($query_string != "") {
> set $no_cache 0; # кешируем страницы с аргументами
> }
Обращаю ваше внимание на то, что вы таким образом разрешаете
кешировать POST запросы по https с аргументами. Сомневаюсь,
что именно такая логика вам была нужна.
> # не кешируем, если есть такие куки
> if ($http_cookie ~*
> "auth_user|login|comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no
> _cache|wordpress_logged_in")
{
> set $no_cache 1;
> }
Скорее всего вы хотите:
map $args $empty_args {
default 0;
"" 1
}
fastcgi_no_cache $empty_args $https $cookie_auth_user $cookie_login .. ;
--
Валентин Бартенев
Подробная информация о списке рассылки nginx-ru