ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: alias vs root with re location



Hello!

On Fri, Aug 13, 2010 at 01:18:37PM +0300, Vasil Mikhalenya wrote:

> Привет всем,
> 
> заметил странности в поведении дерективы alias, а точнее необъяснимое
> поведение
> 
> 2010/08/13 12:05:03 [error] 28688#0: *89 opendir()
> "/opt/gptour/web-app-stat/gptour/*uploa*" failed (2: No such file or
> directory), client: ipaddress, server: blabla.com, request: "GET /upload/
> HTTP/1.0", host: "blabla.com"
> 
> в конфиге
> 
>         location ~* ^/upload {
>                 autoindex on;
>                 expires      max;
>                 alias           /opt/gptour/web-app-stat/gptour/upload;

В location'е, заданном регулярным выражением, alias задаёт полный 
путь к файлу.  Потому как иначе - никак, это вам не prefix match 
где alias заменяет root + префикс uri который совпал с 
location'ом, тут понятия "префикс который совпал" не существует.

В данном случае - мы видим проблему в модуле autoindex, который 
видит запрос на индекс, и пытается "убрать" слэш из пути (а в 
пути-то слеша и нет...).

Но даже если эту проблему исправить - любой запрос к 
/upload/something будет пытаться открыть каталог 
/opt/gptour/web-app-stat/gptour/upload.  Вероятно это не то чего 
хотелось добиться.

> Соответсвенно отдается 404.
> 
> Заметил это, когда хотел несколько алььтернатив в регулярке добавить в один
> location.
> директива root работает нормально, но тогда нужно несколько одинаковых
> location.
> 
> Еще пример:
> 
> ==> /var/log/nginx/error.log <==
> 2010/08/13 12:09:55 [error] 29076#0: *148
> "/opt/gptour/web-app-stat/gptour/upload*0* <-- тут перенос строки в логе
> *Hostindex.html*" is not found (2: No such file or directory), client:
> 
> если в конфиге
> 
>         location ~* ^/(upload|files) {
>                 autoindex on;
>                 expires      max;
>                 alias           /opt/gptour/web-app-stat/gptour/upload;

-                 alias           /opt/gptour/web-app-stat/gptour/upload;
+                 alias           /opt/gptour/web-app-stat/gptour/upload$uri;

Или, что лучше, используйте статические location'ы.  Регулярные 
выражения в данном случае нафиг не нужны.

Maxim Dounin

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.