Re[2]: Работа location с алиасом

Татьяна Орлова agent00990 на mail.ru
Вс Окт 23 20:49:58 UTC 2022


Добрый вечер! Попробую на практике этот вариант с такой конструкцией. Sunday, 23 October 2022, 11:37PM +03:00 from Maxim Dounin  mdounin на mdounin.ru :

>Hello!
>
>On Sun, Oct 23, 2022 at 08:19:58PM +0300,  izorkin на gmail.com wrote:
>
> Здравствуйте.
>
> Сейчас столкнулся с непонятной ошибкой.
>
> Тестовый пример:
> ```
> root /var/www;
>
> location / {
> try_files $uri =404;
> }
>
> location /test/ {
> try_files $uri =404;
> alias /var/test/;
> }
> ```
>
> Проверяю доступность тестового файла через curl:
> ```
> curl --head -k  https://example.com/test/example.txt
> HTTP/2 200
> ...
> ```
>
> Файл доступен. Лог отладки:
> ```
> ...
> *302 test location: "/"
> *302 test location: "test/"
> *302 using configuration "/test/"
> ...
> *302 http script var: "/test/example.txt"
> *302 trying to use file: "example.txt" "/var/test/example.txt"
> *302 try file uri: "/test/example.txt"
> ...
> *302 http filename: "/var/test/example.txt"
> ...
> *302 http2 output header: ":status: 200"
> ...
> ```
>
> Меняю location `test` на такой вариант:
> ```
> location ~ ^/(test|custom)/ {
> try_files $uri =404;
> alias /var/test/;
> }
> ```
>
> Теперь файл не доступен. По идее должно работать... Лог отладки:
> ```
> ...
> *303 test location: "/"
> *303 test location: ~ "^/(test|custom)/"
> *303 using configuration "^/(test|custom)/"
> ...
> *303 http script copy: "/var/test/"
> *303 http script var: "/test/example.txt"
> *303 trying to use file: "/test/example.txt" "/var/test//test/example.txt"
> *303 trying to use file: "=404" "/var/test/=404"
> *303 http finalize request: 404, "/test/example.txt?" a:1, c:1
> *303 http special response: 404, "/test/example.txt?"
> ...
> *303 http2 output header: ":status: 404"
> ...
> ```
>
> Так и должно работать?
> Только вот если убрать параметр `alias /var/test/;`, то `location /test/` и `location ~ ^/(test|custom)/` работают одинаково.
>
>Директива "alias" заменяет совпавшую часть location'а на заданный 
>путь.  Если же location задан регулярным выражением, то "совпавшей 
>части" как таковой нет, и это работает так (цитата по 
>http://nginx.org/r/alias/ru ):
>
>: Если alias используется внутри location’а, заданного регулярным 
>: выражением, то регулярное выражение должно содержать выделения, а 
>: сам alias — ссылки на эти выделения (0.7.40), например:
>: 
>: location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
>:     alias /data/w3/images/$1;
>: }
>
>То есть всё работает ровно так, как должно/документировано. 
>
>Безусловно, в конкретном примере оно работает не очень ожидаемо 
>для пользователя.  Но, скажем так, это не единственный пример, 
>когда location'ы, заданные регулярными выражениями, работают не 
>очень ожидаемо для пользователя.  Лучше использовать location'ы, 
>заданные префиксной строкой, Игорь даже как-то доклад об этом 
>делал.
>
>-- 
>Maxim Dounin
>http://mdounin.ru/
>_______________________________________________
>nginx-ru mailing list --  nginx-ru на nginx.org
>To unsubscribe send an email to  nginx-ru-leave на nginx.org
----------- следующая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20221023/52c12860/attachment.htm>


Подробная информация о списке рассылки nginx-ru