alias vs root with re location
Maxim Dounin
mdounin на mdounin.ru
Пт Авг 13 16:45:16 MSD 2010
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