Алгоритм NGINX try_files: почему 'try_files "/" = 404;' отличается от 'try_files "//" = 404;' - PullRequest
0 голосов
/ 30 апреля 2019

Изучение 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 также поверхностны.

...