Re: Баг try_files + valid_referers

Maxim Dounin mdounin at mdounin.ru
Thu Aug 29 12:00:16 UTC 2013


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