Re: Баг try_files + valid_referers
29.08.2013 21:06, Андрей Василишин пишет: location @invalid { access_log /var/log/nginx/site.com.invalid.log main; root /var/www/site.com; try_files $uri $uri/ /index.php?q=$uri&$args; } насколько я помню, в конце лучше бы еще дописать =404; и включить многократную обработку ошибок ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Баг try_files + valid_referers
29.08.2013 18:07, Maxim Dounin пишет: Hello! On Thu, Aug 29, 2013 at 04:56:39PM +0300, Андрей Василишин wrote: 29.08.2013 15:00, Maxim Dounin пишет: Варианты - уйти в другой location и писать отдельный лог там, писать лог с переменными в имени. Что-то не могу придумать, как без if это сделать. По приведённой в предыдущем письме ссылке написано, как это сделать, если вы про переход в другой location. Делать это без if - не обязательно, достаточно обеспечить, чтобы обработка запроса при попадании в if уходила в другой location (i.e., использовать if + rewrite ... last или if + return). http://wiki.nginx.org/IfIsEvil Спасибо всем за ответы, в общем удалось сделать, то что хотел так: error_page 410 = @invalid; error_page 411 = @a; location / { index index.php index.htm index.html; root /var/www/site.com; try_files $uri $uri/ /index.php?q=$uri&$args @backend; rewrite "^/([^\/]+/[^\/]+)/((s[\d]+)?(e[\d]+){1}(\-[\d]+)*)$" /$1.html?serie=$2; rewrite ([^\/]+/[^\/]+.html)/$ /$1 permanent; rewrite (tag/[^\/]+)/$ /$1 permanent; valid_referers none server_names ~(yandex|google|yahoo|bing|facebook|fbcdn|mail.ru|rambler|nigma|vk.com); if ($invalid_referer) { return 410; } if ($a) { return 411; } } location @a { access_log /var/log/nginx/a.site.com.access.log main; root /var/www/site.com; try_files $uri $uri/ /index.php?q=$uri&$args; } location @invalid { access_log /var/log/nginx/site.com.invalid.log main; root /var/www/site.com; try_files $uri $uri/ /index.php?q=$uri&$args; } ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Баг try_files + valid_referers
Hello! On Thu, Aug 29, 2013 at 04:56:39PM +0300, Андрей Василишин wrote: > 29.08.2013 15:00, Maxim Dounin пишет: > > >Варианты - уйти в другой location и писать отдельный лог там, > >писать лог с переменными в имени. > > > > Что-то не могу придумать, как без if это сделать. По приведённой в предыдущем письме ссылке написано, как это сделать, если вы про переход в другой location. Делать это без if - не обязательно, достаточно обеспечить, чтобы обработка запроса при попадании в if уходила в другой location (i.e., использовать if + rewrite ... last или if + return). http://wiki.nginx.org/IfIsEvil -- Maxim Dounin http://nginx.org/en/donation.html ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Баг try_files + valid_referers
Today Aug 29, 2013 at 16:56 Андрей Василишин wrote: > 29.08.2013 15:00, Maxim Dounin пишет: > > > Варианты - уйти в другой location и писать отдельный лог там, > > писать лог с переменными в имени. > > Что-то не могу придумать, как без if это сделать. Не без if, а без неявного вложенного location в if. Из if уйти в другой location (error_page+return, rewrite) со своим логом и try_files. -- WNGS-RIPE ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Баг try_files + valid_referers
29.08.2013 15:00, Maxim Dounin пишет: Варианты - уйти в другой location и писать отдельный лог там, писать лог с переменными в имени. Что-то не могу придумать, как без if это сделать. ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Баг try_files + valid_referers
Hello! On Thu, Aug 29, 2013 at 02:47:01PM +0300, Андрей Василишин wrote: > location / { > index index.php index.htm index.html; > root /var/www/site.com; > try_files $uri > $uri/ > /index.php?q=$uri&$args > @backend; > rewrite > "^/([^\/]+/[^\/]+)/((s[\d]+)?(e[\d]+){1}(\-[\d]+)*)$" > /$1.html?serie=$2; > rewrite ([^\/]+/[^\/]+.html)/$ /$1 permanent; > rewrite (tag/[^\/]+)/$ /$1 permanent; > valid_referers none server_names > ~(yandex|google|yahoo|bing|facebook|fbcdn|mail.ru|rambler|nigma|vk.com); > if ($invalid_referer) { > access_log > /var/log/nginx/site.com.invalid.log main; > } > if ($a) { > access_log > /var/log/nginx/a.site.com.access.log main; > } > > } > > > Почему-тоЮ, если приходит запрос с реферером, которого нет в > valid_referers, try_files почему-то проверяет только $uri и потом > возвращает сразу 404: http://wiki.nginx.org/IfIsEvil Конкретно ваш случай - "try_files wont work due to if". [...] > Ну, и чтоб два раза не вставать: какой альтернативный способ писать > отдельный лог для invalid_referer? Варианты - уйти в другой location и писать отдельный лог там, писать лог с переменными в имени. -- Maxim Dounin http://nginx.org/en/donation.html ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Баг try_files + valid_referers
location / { index index.php index.htm index.html; root /var/www/site.com; try_files $uri $uri/ /index.php?q=$uri&$args @backend; rewrite "^/([^\/]+/[^\/]+)/((s[\d]+)?(e[\d]+){1}(\-[\d]+)*)$" /$1.html?serie=$2; rewrite ([^\/]+/[^\/]+.html)/$ /$1 permanent; rewrite (tag/[^\/]+)/$ /$1 permanent; valid_referers none server_names ~(yandex|google|yahoo|bing|facebook|fbcdn|mail.ru|rambler|nigma|vk.com); if ($invalid_referer) { access_log /var/log/nginx/site.com.invalid.log main; } if ($a) { access_log /var/log/nginx/a.site.com.access.log main; } } Почему-тоЮ, если приходит запрос с реферером, которого нет в valid_referers, try_files почему-то проверяет только $uri и потом возвращает сразу 404: 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 http script var 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 http script var: "1" 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 http script if 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 http script var 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 http geo started: 176.104.57.123 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 http geo: 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 http script var: "" 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 http script if 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 http script if: false 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 post rewrite phase: 4 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 generic phase: 5 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 generic phase: 6 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 generic phase: 7 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 access phase: 8 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 access phase: 9 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 post access phase: 10 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 try files phase: 11 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 content phase: 12 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 content phase: 13 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 content phase: 14 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 http filename: "/var/www/site.com/series/univer-novaya-obschaga-serial.html" 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 add cleanup: 019C3E58 2013/08/29 11:06:34 [error] 7188#0: *1851357643 open() "/var/www/site.com/series/univer-novaya-obschaga-serial.html" failed (2: No such file or directory), client: 176.104.57.123, server: site.com, request: "GET /series/univer-novaya-obschaga-serial.html HTTP/1.1", host: "site.com", referrer: "http://www.top-page.ru/ya/?q=%D0%BD%D0%BE%D0%B2%D0%B0%D1%8F+%D0%BE%D0%B1%D1%89%D0%B0%D0%B3%D0%B0+%D0%BD%D0%BE%D0%B2%D1%8B%D0%B5+%D1%81%D0%B5%D1%80%D0%B8%D0%B8+%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%B5%D1%82%D1%8C+%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD"; 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 http finalize request: 404, "/series/univer-novaya-obschaga-serial.html?" a:1, c:1 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 http special response: 404, "/series/univer-novaya-obschaga-serial.html?" 2013/08/29 11:06:34 [debug] 7188#0: *1851357643 internal redirect: "/errors/404.html?" Если закомментировать строки: valid_referers none server_names ~(yandex|google|yahoo|bing|facebook|fbcdn|mail.ru|rambler|nigma|vk.com); if ($invalid_referer) { access_log /var/log/nginx/site.com.invalid.log main; все идет как надо, то есть доходит до /index.php?q=$uri&$args # nginx -V nginx version: nginx/1.2.4 configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-file-aio --with-http_flv_module --with-http_geoip_module --with-http_mp4_module --with-http_realip_module --with-http_secure_link_module --with-http_stub_status_module --without-http_scgi_module --without-http_split_clients_module --without-http_ssi_module --without-http_userid_module --without-http_uwsgi_module Ну, и чтоб два раза не вставать: какой альтернативный способ писать отдельный лог для invalid_referer? ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru