Page 1 of 1

Спецнастройки кэширования от Nginx

Posted: Mon Sep 07, 2015 12:11 pm
by proger2
Добрый день, уважаемые админы. У меня такая задача. Имеется сайт с такими урлами /?map=1 и т.д. Эти страницы по сути статические и оооочень редко меняются. Мне нужно их закэшировать, да не на два часа, а сразу так на неделю, другую, чтобы лишних обращений а mysql не было. А то ему и так уже плоховато.

И так - можно ли прям среди списка расширений jpg, gif и т.д. указать ?map или так не проканает. Если нет, то где в конфигах прописать правило, что все адреса с ?map подлежат жесткому кэшу. Или только через rewriteRule из них делать /1.html и уже их кэшировать без проблем?

Ну и вторая вещь это время кэширования. Где ее настроить для отдельного пользователя. Стараюсь придерживаться правила один сайт один пользователь под него. Поэтому конфигу можно делать не сайту а юзеру.

Спасибо!

Re: Спецнастройки кэширования от Nginx

Posted: Wed Sep 09, 2015 7:03 am
by proger2
Что задача не имеет решения? Я думал это достаточно легко сделать. Видимо придется все же к урлам дописывать .html расширение и кэшировать так ... :(

Re: Спецнастройки кэширования от Nginx

Posted: Wed Sep 09, 2015 7:59 am
by Deeryo
Привет, в список расширений файлов это не добавить. В конфиге nginx используется location для выделения url, а в твоем случае не url, а вообще аргумент. Ищи ответы в гугле по запросам типа "nginx match url args", например:

http://e-mats.org/2011/07/nginx-and-rew ... arguments/
http://serverfault.com/questions/160790 ... parameters
http://stackoverflow.com/questions/1999 ... arams-only

Чтобы настроить это для сайта, скорей всего нужно будет создать свой шаблон nginx в папке /usr/local/vesta/data/templates/web/nginx

Re: Спецнастройки кэширования от Nginx

Posted: Thu Sep 10, 2015 6:04 am
by proger2
Спасибо. Мне проще урлы в ЧПУ перевести и кэшировать их как .html

Re: Спецнастройки кэширования от Nginx

Posted: Sat Sep 12, 2015 9:58 pm
by ykpon
proger2 wrote:Добрый день, уважаемые админы. У меня такая задача. Имеется сайт с такими урлами /?map=1 и т.д. Эти страницы по сути статические и оооочень редко меняются. Мне нужно их закэшировать, да не на два часа, а сразу так на неделю, другую, чтобы лишних обращений а mysql не было. А то ему и так уже плоховато.

И так - можно ли прям среди списка расширений jpg, gif и т.д. указать ?map или так не проканает. Если нет, то где в конфигах прописать правило, что все адреса с ?map подлежат жесткому кэшу. Или только через rewriteRule из них делать /1.html и уже их кэшировать без проблем?

Ну и вторая вещь это время кэширования. Где ее настроить для отдельного пользователя. Стараюсь придерживаться правила один сайт один пользователь под него. Поэтому конфигу можно делать не сайту а юзеру.

Спасибо!
В конфиге nginx найди локейшен
location / {
...
}
И в него добавь перед последней закрывающей скобкой ( "}" )

Code: Select all

if ($arg_map ~* "[0-9]+") {
        proxy_cache cache;
        proxy_cache_valid 7d;
        proxy_cache_valid 404 1m;
        proxy_no_cache $no_cache;
        proxy_cache_bypass $no_cache;
        proxy_cache_bypass $cookie_session $http_x_update;
    }
7d - это 7 дней.

Re: Спецнастройки кэширования от Nginx

Posted: Tue Sep 15, 2015 6:31 am
by proger2
Спасибо. Получилось! Добавил в шаблон cashing.tpl указанные строки и установил этот шаблон сайту в панельке. И все заработало.

Re: Спецнастройки кэширования от Nginx

Posted: Tue Sep 15, 2015 11:39 am
by proger2
Рано обрадовался. Время кэша не 7 дней, а несколько минут ... Думаю может место для кэша переполняется и старые файлы трутся новыми? Может расширить нужно место? Или в чем может быть причина?

Re: Спецнастройки кэширования от Nginx

Posted: Tue Sep 15, 2015 12:30 pm
by ykpon
proger2 wrote:Рано обрадовался. Время кэша не 7 дней, а несколько минут ... Думаю может место для кэша переполняется и старые файлы трутся новыми? Может расширить нужно место? Или в чем может быть причина?
Пришли полностью конфиг домена. И ты уверен, что он не перезаписался стандартным?

Re: Спецнастройки кэширования от Nginx

Posted: Fri Sep 18, 2015 10:42 am
by proger2
Полный конфиг вот. ip и домен потер частично. Так вот, если в него вставляю предложенный код в указанное место, то нгинкс пишет ошибку - не удалось перезапустить сервис и указывает на 26 строку - там начало предложенного кода. Пробовал и за скобку и перед. Все равно что то про аргумент ругается.

И еще вопрос. Я конечно не спец в nginx, но как я понял, этот конфиг кэширует все, кроме того, что указано ниже? jpeg|jpg|png|gif|bmp|ico|sv и т.д. proxy_cache off; - то есть брать не из кэша, а напрямую? В принципе разумно. Чего картинки то кэшировать - они и так легко отдаются. А вот собранную страницу да, закэшировать желательно было бы.

Но и этот конфиг все равно proxy_cache_valid 2d; 2 дня не держит. Те же минут 15 и очищается.

server {
listen 1*****0;
server_name xn-----7a.xn--p1ai www.xn-----7bya.xn--p1ai;
error_log /var/log/apache2/domains/г.рф.error.log error;

location / {
proxy_pass http://10:8080;

proxy_cache cache;
proxy_cache_valid 2d;
proxy_cache_valid 404 1m;
proxy_no_cache $no_cache;
proxy_cache_bypass $no_cache;
proxy_cache_bypass $cookie_session $http_x_update;

location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|htm|html|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3|mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mp4|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
proxy_cache off;
root /home/***/public_html;
access_log /var/log/apache2/domains/*ф.log combined;
access_log /var/log/apache2/domains/*ф.bytes bytes;
expires max;
try_files $uri @fallback;

}

}

location /error/ {
alias /home/maps/web/*рф/document_errors/;
}

location @fallback {
proxy_pass http://*:8080;
}

location ~ /\.ht {return 404;}
location ~ /\.svn/ {return 404;}
location ~ /\.git/ {return 404;}
location ~ /\.hg/ {return 404;}
location ~ /\.bzr/ {return 404;}

include /home/maps/conf/web/nginx.*ф.conf*;
}