runseoman

Рейтинг
94
Регистрация
22.12.2009

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;

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

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

вопросы

у меня вопрос

я задал

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

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

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

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

то есть надо взять /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/

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

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

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

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

это я уже пробовал

ругается на эту строку

Restarting nginx: [emerg]: "proxy_pass" may not have URI part in location given by regular expression, or inside named location, or inside the "if" statement, or inside the "limit_except" block in /etc/nginx/sites-enabled/t.ru:22
configuration file /etc/nginx/nginx.conf test failed



---------- Добавлено 08.03.2013 в 19:53 ----------

как я понял надо

location ~* .+\.(jpg|jpeg|gif|css|js)$ {

proxy_pass http://backend/...........;

где ....... - регулярное выражение

proxy_pass http://backend/~* .+\.(jpg|jpeg|gif|css|js); - не подходит

---------- Добавлено 08.03.2013 в 20:28 ----------

------------------------------------------------------------------------------------------

может я что-то не так объясняю

попробую еще раз

1) запрос от посетителя сайта на файл (jpg/png/css/js/gif)

2) nginx смотрит у себя в кеше

3.1) если файл найден то отдать пользователю

3.2) если файл не найдет то скачать с бэкенда себе(в кеш nginx и хранить например 1 сутки) и отдать пользователю

то есть если второй пользователь запросит этот же файл в течении суток, то nginx отдаст его уже из своего кеша не дергая при этом бэкенд

ну так подскажите что добавить/убрать/изменить

я же прошу помочь, а не обучать

если бы я увидел как правильно, я бы хоть разобрался бы что к чему и тогда дальше крутил

вот полный конфиг вирт хоста

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)$ {
proxy_cache all;
proxy_cache_valid 404 502 503 1m;
proxy_cache_valid any 1h;
}
}

-----------------------------------

location /

тут все ок, сайт же работает

location ~* .+\.(jpg|jpeg|gif|css|js)$

тут как я понял должны кешироваться картинки в all пути/настройки к которому прописаны в начале

---------- Добавлено 08.03.2013 в 16:32 ----------

kreat0r:
Если я правильно понял, то автор пытается кэшировать не картинки, а результат работы скрипта. Если так, то задача изначально неверна.

nginx должен кешировать картинки которые отдает apache

nginx и apache на разных физических серверах

читал, просмотрел кучу примеров

результат что-то не айс

подскажите как решить траблу

в файле вирт хоста

перед server написал

proxy_cache_path /var/www/t/cache level=1:2 keys_zone=cache:30m max_size=1G;

proxy_temp_path /var/www/t/tempfiles/ 1 2;

в server вставил блок

location ~* ^.+\.(jpg|jpeg|gif|css|js)$ {

proxy_cache cache;

proxy_cache_valid 10m;

}

в результате создался путь /var/www/t/cache и /var/www/t/tempfiles/

в cache - пусто

в tempfiles - через некоторое время появилось куча числовых каталогов, но файлов нет

Den73:
а что должно быть не пусто? я вам выше написал что нужно крутить что бы бэкенд забирал статику и ложил ее к себе локально сам.

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

Всего: 102