<HTML><BODY><p style='margin-top: 0px;' dir="ltr">Добрый вечер! Попробую на практике этот вариант с такой конструкцией.</p>
Sunday, 23 October 2022, 11:37PM +03:00 from Maxim Dounin <a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>:<br><br><blockquote id="mail-app-auto-quote" cite="16665574351657030441" style="border-left:1px solid #005FF9; margin:0px 0px 0px 10px; padding:0px 0px 0px 10px;">
<div class="js-helper js-readmsg-msg">
<style type="text/css"></style>
<div >
<base target="_self" href="https://e.mail.ru/" />
<div id="style_16665574351657030441_BODY">Hello!<br>
<br>
On Sun, Oct 23, 2022 at 08:19:58PM +0300, <a href="mailto:izorkin@gmail.com">izorkin@gmail.com</a> wrote:<br>
<br>
> Здравствуйте.<br>
> <br>
> Сейчас столкнулся с непонятной ошибкой.<br>
> <br>
> Тестовый пример:<br>
> ```<br>
> root /var/www;<br>
> <br>
> location / {<br>
> try_files $uri =404;<br>
> }<br>
> <br>
> location /test/ {<br>
> try_files $uri =404;<br>
> alias /var/test/;<br>
> }<br>
> ```<br>
> <br>
> Проверяю доступность тестового файла через curl:<br>
> ```<br>
> curl --head -k <a href="https://example.com/test/example.txt" target="_blank" >https://example.com/test/example.txt</a><br>
> HTTP/2 200<br>
> ...<br>
> ```<br>
> <br>
> Файл доступен. Лог отладки:<br>
> ```<br>
> ...<br>
> *302 test location: "/"<br>
> *302 test location: "test/"<br>
> *302 using configuration "/test/"<br>
> ...<br>
> *302 http script var: "/test/example.txt"<br>
> *302 trying to use file: "example.txt" "/var/test/example.txt"<br>
> *302 try file uri: "/test/example.txt"<br>
> ...<br>
> *302 http filename: "/var/test/example.txt"<br>
> ...<br>
> *302 http2 output header: ":status: 200"<br>
> ...<br>
> ```<br>
> <br>
> Меняю location `test` на такой вариант:<br>
> ```<br>
> location ~ ^/(test|custom)/ {<br>
> try_files $uri =404;<br>
> alias /var/test/;<br>
> }<br>
> ```<br>
> <br>
> Теперь файл не доступен. По идее должно работать... Лог отладки:<br>
> ```<br>
> ...<br>
> *303 test location: "/"<br>
> *303 test location: ~ "^/(test|custom)/"<br>
> *303 using configuration "^/(test|custom)/"<br>
> ...<br>
> *303 http script copy: "/var/test/"<br>
> *303 http script var: "/test/example.txt"<br>
> *303 trying to use file: "/test/example.txt" "/var/test//test/example.txt"<br>
> *303 trying to use file: "=404" "/var/test/=404"<br>
> *303 http finalize request: 404, "/test/example.txt?" a:1, c:1<br>
> *303 http special response: 404, "/test/example.txt?"<br>
> ...<br>
> *303 http2 output header: ":status: 404"<br>
> ...<br>
> ```<br>
> <br>
> Так и должно работать?<br>
> Только вот если убрать параметр `alias /var/test/;`, то `location /test/` и `location ~ ^/(test|custom)/` работают одинаково.<br>
<br>
Директива "alias" заменяет совпавшую часть location'а на заданный <br>
путь. Если же location задан регулярным выражением, то "совпавшей <br>
части" как таковой нет, и это работает так (цитата по <br>
<a href="http://nginx.org/r/alias/ru" target="_blank" >http://nginx.org/r/alias/ru</a>):<br>
<br>
: Если alias используется внутри location’а, заданного регулярным <br>
: выражением, то регулярное выражение должно содержать выделения, а <br>
: сам alias — ссылки на эти выделения (0.7.40), например:<br>
: <br>
: location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {<br>
: alias /data/w3/images/$1;<br>
: }<br>
<br>
То есть всё работает ровно так, как должно/документировано. <br>
<br>
Безусловно, в конкретном примере оно работает не очень ожидаемо <br>
для пользователя. Но, скажем так, это не единственный пример, <br>
когда location'ы, заданные регулярными выражениями, работают не <br>
очень ожидаемо для пользователя. Лучше использовать location'ы, <br>
заданные префиксной строкой, Игорь даже как-то доклад об этом <br>
делал.<br>
<br>
-- <br>
Maxim Dounin<br>
<a href="http://mdounin.ru/" target="_blank" >http://mdounin.ru/</a><br>
_______________________________________________<br>
nginx-ru mailing list -- <a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
To unsubscribe send an email to <a href="mailto:nginx-ru-leave@nginx.org">nginx-ru-leave@nginx.org</a><br>
</div>
<base target="_self" href="https://e.mail.ru/" />
</div>
</div>
</blockquote></BODY></HTML>