Re: Баг try_files + valid_referers
Андрей Василишин
a.vasilishin at kpi.ua
Thu Aug 29 17:06:18 UTC 2013
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