Hello!
On Mon, Nov 02, 2009 at 03:02:50PM +0300, TJ@xxxxxx wrote:
Приветствую!
Кусок конфига (ссылка на доки
http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html):
..
location /chkimg/
{
root /var/projects/www/test;
log_format imgtestlog
'"$request" $status $body_bytes_sent '
'"$http_referer" "$chk_img"
"$request_filename"';
access_log /var/log/nginx/imgtest.log
imgtestlog;
if (-x $request_filename)
{
set $chk_img 1;
}
if ($chk_img)
{
return 403;
}
}
..
При запросе файла (картинки jpeg) с установленным аттрибутом
исполнения (chmod +x) - эффект нулевой, т.е. отдается содержимое
файла. В логе - правильный request_filename и пустая $chk_img.
Соответственно ожидаемо отдается файл без такого аттрибута.
Подобная ситуация, когда -x заменяю на !-x и запрашиваю файл с
аттрибутом +x и файл без такового - в обоих случаях ошибка 403.
Ради чистоты эксперимента заменил -x на -e - сразу же получаю 403
ошибку и в логе $chk_img равна 1.
Проблема пришла из дебиана и nginx/0.6.32. Решил проверить на
рабочей тачке с гентой и nginx посвежее nginx/0.7.59, gentoo linux.
В чем траблы?
Сюрприз: в данном случае виноват не if() сам по себе. :)
Патч.
Maxim Dounin