Welcome! Log In Create A New Profile

Advanced

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

Maxim Dounin
October 23, 2022 04:38PM
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
Subject Author Posted

Работа location с алиасом

Anonymous User October 23, 2022 01:22PM

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

Maxim Dounin October 23, 2022 04:38PM

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

Татьяна Орлова via nginx-ru October 23, 2022 04:52PM

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

Anonymous User October 24, 2022 02:48AM

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

Maxim Dounin October 24, 2022 11:50AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 314
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready