Изучение nginx, пытающегося понять, как работает try_files. Читайте официальные документы, сообщения в блогах, но не можете найти необходимую информацию, чтобы понять разницу между "/" и "//" при использовании с try_files.
Устранение проблемы с перенаправлением и возникновение следующей ситуации (возможно, это не обычный случай использования, но очень любопытно, что происходит под капотом nginx, так что, надеюсь, не оффтоп). Пожалуйста, присоединяйтесь, если вы осведомлены. В частности, следующая упрощенная конфигурация ведет себя странным образом:
server {
listen 80;
server_name server.local;
location / {
try_files _ @app;
}
location @app {
proxy_set_header HOST $host;
proxy_pass http://app;
}
}
upstream app { server 127.0.0.1:8080; }
server {
listen 8080;
root /var/www/html/app;
location / {
#try_files "/" =404;
try_files "//" =404;
}
}
Если строка try_files равна "/", то ответ от curl -I http://server.local/
будет:
HTTP/1.1 301 Moved Permanently
...
Location: http://server.local:8080/
Принимая во внимание, что если строка try_files равна "//" (или любому числу> 1 слешей, например "//////"), ответ curl будет:
HTTP/1.1 403 Forbidden
Возникающие вопросы:
1) как именно произошло перенаправление 301. Не могу сделать вывод из документов.
2) как получается 403, он нигде не указан. только см 404?
3) почему переадресация осуществляется в порт upstream? опять же, кто вызвал перенаправление?
Пожалуйста, объясните или укажите подробный документ о точном алгоритме try_files, поиск в Google не помог. Официальные документы nginx также поверхностны.