Добрый вечер! Попробую на практике этот вариант с такой конструкцией. Sunday, 23 October 2022, 11:37PM +03:00 from Maxim Dounin mdou...@mdounin.ru :
>Hello! > >On Sun, Oct 23, 2022 at 08:19:58PM +0300, izor...@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-le...@nginx.org
_______________________________________________ nginx-ru mailing list -- nginx-ru@nginx.org To unsubscribe send an email to nginx-ru-le...@nginx.org