nginx и кеширование

1 234
Andreyka
На сайте с 19.02.2005
Offline
822
#21

Эти файлы можно напрямую с диска давать

Не стоит плодить сущности без необходимости
R
На сайте с 22.12.2009
Offline
94
#22

что значит напрямую?

на сервере с apache картинки отдаются скриптом (ресайзятся с 5Mpx до 200*150 и с 5Mpx до 1024*765)

отресайзеные картинки не хранятся

поэтому и хочу чтоб nginx сохранял у себя то что отдается пользователю и переодически обновлял

Andreyka
На сайте с 19.02.2005
Offline
822
#23

Тога настройте proxy_cache для картинок по примеру документации

R
На сайте с 22.12.2009
Offline
94
#24

то есть надо взять /ru/forum/comment/11521074

и переделать:

вот что вышло

proxy_cache_path /var/www/t/ keys_zone=all:300m max_size=1G;
proxy_ignore_headers X-Accel-Redirect;
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
proxy_store on;


server {
listen 80;
server_name t.ru;

location / {
proxy_pass http://192.168.0.2:8080/;
index index.php
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}


location ~* .+\.(jpg|jpeg|gif|css|js)$ {
root /var/www/t;
open_file_cache_errors off;
error_page 404 = @fetch;
}

location @fetch {
internal;
proxy_cache all;
proxy_pass http://192.168.0.2:8080$uri;
proxy_store on;
proxy_temp_path /var/www/t/temp;
root /var/www/t;
}

}



---------- Добавлено 09.03.2013 в 13:46 ----------

вот сделал

текст конфига

proxy_cache_path /var/www/t levels= keys_zone=all:300m;


server {
listen 80;
server_name t.ru www.t.ru;
error_page 404 = @nocached;

location ~* .+\.(jpg|jpeg|gif|gz|zip|flv|rar|wmv|avi|css|swf|png|htc|ico|mpeg|mpg|txt|mp3|mov|js)$ {
expires 1y;
error_page 404 = @fetch;
}

location @fetch {
proxy_pass http://192.168.0.2:8080;
proxy_store on;
proxy_temp_path /var/www/t;
proxy_set_header Host $host;
proxy_set_header If-Modified-Since "";
}

location @nocached {
proxy_pass http://192.168.0.2:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
proxy_pass http://192.168.0.2:8080;
index index.php
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

}

только вот непонятно следующее

1) работает ли кеширование, как это проверить (хотя грузиться стало быстрее)

2) почему файло, которое кешируется, скидывается не в /var/www/t (как указано в конфиге) , а в /usr/local/nginx/html/ 😕

в конфигах я нигде не нашел /usr/local/nginx/html/

M
На сайте с 24.10.2011
Offline
173
#25

runseoman, если прочитать и настроить самостоятельно не получается, всегда можно попросить кого-то настроить за деньги, затем изучить конфиг и понять, что же поменялось

R
На сайте с 22.12.2009
Offline
94
#26
michaek:
runseoman, если прочитать и настроить самостоятельно не получается, всегда можно попросить кого-то настроить за деньги, затем изучить конфиг и понять, что же поменялось

посмотрите на раздел, написано "Технические вопросы > Администрирование серверов"

вопросы

у меня вопрос

я задал

прошу ответа/совета, пробую сделать сам и тд

это форум, а не служба поддержки

в этом разделе народ общается/делиться

если бы я хотел чтоб мне все сделали и не вникать особо в суть я бы обратился в Работа и услуги для вебмастера -> Администрирование серверов и сайтов

Den73
На сайте с 26.06.2010
Offline
523
#27

proxy_cache_path /var/www/t levels= keys_zone=all:300m;


server {
listen 80;
server_name t.ru www.t.ru;
error_page 404 = @nocached;

location ~* .+\.(jpg|jpeg|gif|gz|zip|flv|rar|wmv|avi|css|swf|png|htc|ico|mpeg|mpg|txt|mp3|mov|js)$ {
expires 1y;
error_page 404 = @fetch;
}

location @fetch {
proxy_pass http://192.168.0.2:8080;
proxy_store on;
proxy_temp_path /var/www/t;
proxy_set_header Host $host;
proxy_set_header If-Modified-Since "";
}

location @nocached {
proxy_pass http://192.168.0.2:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
proxy_pass http://192.168.0.2:8080;
index index.php
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

}

и как это должно работать, ужас какой то, вы просто не понимаете что делаете, берете из примеров конструкции и вписываете себе.

---------- Добавлено 09.03.2013 в 23:30 ----------

с proxy_store смотрите пример


# DDOS, No cache
server {
server_name site.com www.site.com;
listen ip;
set $badref 0;
location ~* ^.+\.(jpg|jpeg|gif|png|ico|js|css|mp3|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
lowprotect off;
limit_req zone=img burst=150 nodelay;
expires 3d;
root /var/www/site.com;
error_page 404 = @fetch;
access_log /var/log/nginx/site.com/static.access.log;
valid_referers none blocked server_names ~(yandex|google|vk|twitter);
if ($invalid_referer) {
access_log /var/log/nginx/badrequest.log;
return 444;
}
}
location / {
lowprotect off;
limit_req zone=php burst=4 nodelay;
limit_req zone=1min burst=30 nodelay;
limit_req zone=3min burst=60 nodelay;
proxy_pass http://ip:80;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
access_log /var/log/nginx/site.com/dynamic.access.log;
if ($http_referer !~ ^($|http|https)) {
access_log /var/log/nginx/badrequest.log;
return 444;
}
if ($request_method = POST ) {
set $badref 1;
}
if ($http_referer !~ ^(http://site.com.*|https://site.com.*)) {
set $badref "1${badref}";
}
if ($badref = 11) {
access_log /var/log/nginx/badrequest.log;
return 444;
}
}
location @fetch {
access_log off;
internal;
proxy_pass http://ip:80;
proxy_set_header Host $host;
proxy_redirect off;
proxy_store on;
proxy_store_access user:rw group:rw all:r;
proxy_temp_path /var/www/temp;
root /var/www/site.com;
proxy_set_header If-Modified-Since "";
}
access_log /var/log/nginx/site.com/dynamic.access.log;
include /etc/nginx/global.conf;
include /root/lowprotect/var/domain/site.com/nginx/filter.conf;
}
R
На сайте с 22.12.2009
Offline
94
#28

server {

server_name site.com www.site.com;

listen ip;

set $badref 0;

location ~* ^.+\.(jpg|jpeg|gif|png|ico|js|css|mp3|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {

lowprotect off; - не понял что это, в инете не нашел

limit_req zone=img burst=150 nodelay; тут как я понял не более 150 запросов в секунду для зоны img, только в вашем примере вы не показываете как задается зона limit_req_zone, хотя в доке по nginx читал, но так и не понял что такое зона и ключ и накой они нужны

expires 3d; сохраняем на 3 дня

root /var/www/site.com; тут прописывает куда кешиться файло

error_page 404 = @fetch; как я понял если нет файла (404) обращаемся к блоку location @fetch

access_log /var/log/nginx/site.com/static.access.log; - логи доступа к файлам

valid_referers none blocked server_names ~(yandex|google|vk|twitter);

if ($invalid_referer) {

access_log /var/log/nginx/badrequest.log;

return 444;

}

}

location / {

lowprotect off;

limit_req zone=php burst=4 nodelay;

limit_req zone=1min burst=30 nodelay;

limit_req zone=3min burst=60 nodelay;

proxy_pass http://ip:80; тут как я понял файлы которые не описаны в location ~* ^.+\.(jpg|jpeg|gif|... берутся с сервака напрямую и не кешируются

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Real-IP $remote_addr;

proxy_redirect off; - это не понял зачем тут

access_log /var/log/nginx/site.com/dynamic.access.log;

if ($http_referer !~ ^($|http|https)) {

access_log /var/log/nginx/badrequest.log;

return 444;

}

if ($request_method = POST ) {

set $badref 1;

}

if ($http_referer !~ ^(http://site.com.*|https://site.com.*)) {

set $badref "1${badref}";

}

if ($badref = 11) {

access_log /var/log/nginx/badrequest.log;

return 444;

}

}

location @fetch {

access_log off;

internal; - fetch используется только для внутренний запросов, тоесть только внутри nginx ? а надо ли это обязательно указывать ?

proxy_pass http://ip:80; если нет картинки в кеше, запрос с бэкенда

proxy_set_header Host $host;

proxy_redirect off;

proxy_store on; как бы включить режим кеширования(сохранения файлов: картинки/js/css в кеш)

proxy_store_access user:rw group:rw all:r; а не нельзя просто указать права 777 на каталог указанный в root ?

proxy_temp_path /var/www/temp; - этот каталог почему то всегда пуст, зачем он нужен ?

root /var/www/site.com; каталог куда будет кешироваться/сохранятся файло

proxy_set_header If-Modified-Since "";

}

access_log /var/log/nginx/site.com/dynamic.access.log;

include /etc/nginx/global.conf;

include /root/lowprotect/var/domain/site.com/nginx/filter.conf;

Den73
На сайте с 26.06.2010
Offline
523
#29

proxy_store это не кэширование.

смотрим документацию

"Разрешает сохранение на диск файлов. Параметр on сохраняет файлы в соответствии с путями, указанными в директивах alias или root. "

перевожу, в моем примере при запросе документа, url которого попадает под регулярку (тоесть статика)

jpg|jpeg|gif|png|ico|js|css|mp3|mpe?g|avi|zip|gz|bz2?|rar|swf

происходит попытка взятия файла локально (на фронтенде) из директории

/var/www/site.com

если он есть то отдается клиенту, если его нету то срабатывает обработка ошибки 404

error_page 404 = @fetch;

работает локейшен location @fetch

proxy_pass идем на бэкенд за файлом и отдаем его клиенту.

proxy_store on; разрешаем сохранить этот файл к себе локально с такими же путями, тоесть мы с ходили за файлом на бэкенд и ложим теперь его к себе локально в /var/www/site.com

вот и все.

при последующем запросе этот файл уже напрямую будет отдаваться с фронтенда из папки /var/www/site.com т.к он туда закачался функционалом proxy_store и на бэкенд уже не ходим.

http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_store

Для кэширования используется proxy_cache а не proxy_store.

если вам нужно просто автоматически ложить статику на фронтенд с бэкенда то пойдет proxy_store

если нужно именно кэширование то proxy_cache

надеюсь понятно объяснил.

"root /var/www/site.com; тут прописывает куда кешиться файло"

это откуда брать файл а не куда кэшировать, нету тут кэширования.

M
На сайте с 24.10.2011
Offline
173
#30
runseoman:
посмотрите на раздел, написано "Технические вопросы > Администрирование серверов"
вопросы
у меня вопрос
я задал
прошу ответа/совета, пробую сделать сам и тд
это форум, а не служба поддержки
в этом разделе народ общается/делиться

если бы я хотел чтоб мне все сделали и не вникать особо в суть я бы обратился в Работа и услуги для вебмастера -> Администрирование серверов и сайтов

и что? тут уже не один пост про то, в какую сторону смотреть, но что-то все никак. или нужен готовый конфиг бесплатно?

1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий