ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: как лучше управлять кешированием fastcgi_cache
  • From: VovansystemS <vovansystems@xxxxxxxxx>
  • Date: Thu, 26 Dec 2013 18:14:05 +0300
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; bh=s8B438wH+duFtiaZ23A1Yyz+/lCOE7Vks7wbdi7aDVM=; b=gupt2ZbgqToNzDJDincguAzsaxLb8lwwNw6zdw9M71ybKzYLJ2cZNaM7DnRKf1Ic47 tokmVVAj0MKYvbrtLqTK58mswx/fepZQQrLaI5T+PbNpRiec1THb+SDJsersqiZnHLvn FEsZ7/Jr1iiR9I6U6fisg5EP5qsLVhifrVSpTyhp+88tDG6iOIt257nefaQeECo+h1FR QPZh1OAGQddCrSwEzfFA6jxMQ7+QWMVwbb2rLsjG/ePyCoBbgH6DQjBrdjOIXzKE5P6C Kezx8bV3kFHD/er1G/CQFYh7S9J0s0/6VOWh3B0gPuoy22mw6z2LpkZOLeFSZbcP+nEE 5xPw==
  • In-reply-to: <20131226122902.GZ95113@mdounin.ru>
  • References: <CAAwq3jxC+JMsn+hYA21SjZC7O1rpeLPgPs6b6NkVtcM3TAfHZA@mail.gmail.com> <20131226122902.GZ95113@mdounin.ru>

> Нет.  При кешировании заголовки If-Modified-Since и If-None-Match
> на бекенд не передаются (за исключением ревалидации кеша самим
> nginx'ом), так что в ключе их указывать бессмысленно и может
> принести лишь проблемы.
спасибо!


> Если нужна обработка одним и тем же index.php, то в нужных
> location'ах явно указывать SCRIPT_FILENAME.
вынес в отдельные location'ы то, что требует особых параметров
кеширования, а сами настройки кеширования теперь задаются на уровне
server.


> Лучше - по возможности избегать использование if'ов и rewrite'ов.

А вот как убирать слэши в конце URI без rewrite я не смог придумать
(так, чтобы было перенаправление на URI без слэша) - есть ли какое-то
иное решение?

Также не совсем понятно, как избавится от 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
    }
    if ($https = on) {
        set $no_cache 1; # не кешируем https
    }
    if ($query_string != "") {
        set $no_cache 0; # кешируем страницы с аргументами
    }
    # не кешируем, если есть такие куки
    if ($http_cookie ~*
"auth_user|login|comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in")
{
        set $no_cache 1;
    }

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

    # если $no_cache отличен от нуля, отдаём некешированную страницу
    fastcgi_cache_bypass $no_cache;
    fastcgi_no_cache $no_cache;
    # ревалидируем элемент кэша при помощи условных запросов с полем
заголовка "If-Modified-Since"
    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_ignore_headers  "Cache-Control" "Expires" "Set-Cookie";
    fastcgi_cache_valid 1h;
    fastcgi_cache_valid any 10s;
    fastcgi_cache_use_stale updating error timeout invalid_header
http_500; # отдаём устаревший закешированный ответ в этих случаях

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

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

    location ~* "^/(admin|search)((/.*)$|/$)" {
        set $no_cache 1;
        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@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.