как лучше управлять кешированием fastcgi_cache
VovansystemS
vovansystems at gmail.com
Thu Dec 26 09:17:16 UTC 2013
Добрый день,
скажите, пожалуйста, каким образом правильнее в nginx 1.5.x + php5-fpm (chroot):
1. выставлять разные параметры кеширования для различных локейшнов,
при использовании CMS на основе kohana (всё реврайтится на index.php)?
сейчас я делаю это через if и $request_uri.
2. Есть ли смысл в ключе кеширования указывать также
"$http_if_modified_since|$http_if_none_match|"? Etag будет одинаковый
для некоторого числа запросов, а вот $http_if_modified_since просто
будет плодить элементы кэша, но работать они будут тогда, когда два
таких запроса придут в одну и ту же секунду?
Сейчас использую примерно вот такой конфиг - как лучше его переписать:
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;
charset utf-8;
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 ($request_uri ~* "^/admin(/?.*)$") {
set $no_cache 1; # не кешируем админку
}
if ($request_uri ~* "^/search/(.*)$") {
set $no_cache 1; # не кешируем поиск
}
# не кешируем, если есть такие куки
if ($http_cookie ~*
"auth_user|login|comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in")
{
set $no_cache 1;
}
location / {
rewrite ^/(.*)/$ /$1 redirect; # все ури должны быть без слэша на конце
try_files $uri /index.php$is_args$args;
}
location = /index.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9001;
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|$http_if_modified_since|$http_if_none_match|$host|$request_uri";
fastcgi_ignore_headers "Cache-Control" "Expires" "Set-Cookie";
fastcgi_cache_min_uses 1;
fastcgi_cache_valid 1h;
fastcgi_cache_valid any 10s;
fastcgi_cache_use_stale updating error timeout invalid_header
http_500; # отдаём устаревший закешированный ответ в этих случаях
}
# все остальные .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