Re: Баг try_files + valid_referers

2013-09-04 Пенетрантность denis

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

2013-08-29 Пенетрантность Андрей Василишин

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

2013-08-29 Пенетрантность 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

-- 
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

2013-08-29 Пенетрантность Oleksandr V. Typlyns'kyi
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

2013-08-29 Пенетрантность Андрей Василишин

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

2013-08-29 Пенетрантность Maxim Dounin
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

2013-08-29 Пенетрантность Андрей Василишин

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