забавная грабля

Dmitry Kondratyev null at bikeman.ru
Sun May 22 11:15:43 MSD 2005


Igor Sysoev wrote:

>>>> Наступил тут. :-)
>>>>
>>>> есть
>>>> location / { proxy_pass ... }
>>>> location /dir { alias ... }
>>>>
>>>> Так вот, если дёргаю /dir или /dir/file, то всё хорошо и файл 
>>>> берётся из
>>>> указанного альясом места, а вот если дёргаю /dir.php или /dir_foo.php,
>>>> то оно почему-то говорит 404 вместо того, чтобы проксировать. Или я
>>>> чего-то непонимаю, или это всё же грабли. :-) nginx 0.1.28.
>>>>
>>>> PS Почитал ещё раз мануал насчёт location - вроде так и должно быть и
>>>> всё даже правильно, т.к. урл проверяется до максимального 
>>>> совпадения, но
>>>> конструкция вроде
>>>>
>>>> location ~ ^/dir(/.*)?$ { alias ... } даёт 404 на /dir/...
> 
> 
> Это легко может быть, так как сочетание регулярного выражения в location
> и alias сейчас не поддерживается. И я не знаю, делать ли поддержку,
> когда ту же функциональность можно получить с помощью rewrite.
> 
>>>> Вижу вариант только описать локейшн вроде ^/dir[^/].+ или что-нибудь
>>>> вроде того отдельно на проксирование - скорей всего так оно заработает.
>>>> Но как-то криво это и неправильно на мой взгляд. Попроще никак?
>>>
>>>
>>> location / { proxy_pass ... }
>>> location /dir/ { alias ... }
>>>
>>> По моему, так проще.
>>>
>> Это я уже пробовал - ее работает так. 404 на непроксируемый контент.
> 
> 
> Что именно пробовал - "location /dir" или "location /dir/" ? Это разные
> вещи. /dir.php и /dir_foo.php попадают под /dir, но не попадют под /dir/.


Я понял почему 404 было - когда пишешь /dir/ для альяса, то nginx не 
делает редирект при запросе GET /dir на /dir/ и запрос проксируется на 
бэкенд. При запросе GET /dir/ всё хорошо. Может добавить редирект, чтобы 
дополнительных локейшнов не городить? У меня похожие грабли во многих 
местах, как оказалось, расставлены. Но не на все довелось наступить 
пока. :-)






More information about the nginx-ru mailing list