Здравствуйте, Максим!

On 15.12.2021 15:39, Maxim Dounin wrote:

Воспроизводится ли проблема на приведённом конфиге в чистом виде,
без каких-либо других location'ов и/или rewrite'ов? Если да - то как выглядит минимальный конфиг, на котором проблема
воспроизводится, полностью (nginx -T)?

Воспроизводится на таком конфиге:

error_log /var/log/nginx/error.log debug;
events { use epoll; }
http {
      server {
          server_name example.com;
          location / { proxy_pass http://127.0.0.1; }
          location /download/ { proxy_pass http://127.0.0.2; }
      }
}

На таком конфиге - воспроизводиться должно, это штатное поведение.
Явно документировано в описании директивы location

Теперь понял, большое спасибо! Не дочитал документацию, после слов
"Проиллюстрируем вышесказанное примером" дальше уже читать не стал,
а после него оказывается еще есть описание поведения директивы...

Вопрос исключительно о том, почему, как утверждается в исходном
сообщении, не срабатывает явно заданный location без завершающего
слэша, в том числе с точным совпадением.

Это особенности моей локальной конфигурации. На сервере есть
два контейнера, nginx-frontend и nginx-backend, запрос идет так:
client => nginx-frontend => nginx-backend => proxy_pass http://app

В контейнере nginx-frontend есть два сайта - example.com
и dev.example.com, оба они закрыты с помощью basic_auth:

    location / {
        auth_basic "Site under development";
        auth_basic_user_file /etc/nginx/safe/example.com.htpasswd;
        satisfy any;
        allow 11.22.33.44; # мой IP адрес
        deny all;
        proxy_pass http://nginx-backend;
    }

но для сайта example.com в конфигурации nginx-frontend
есть строчка location /download/ { proxy_pass http://nginx-backend; }
чтобы файлы можно было скачивать из интернета без ввода логина и пароля,
а в конфиге для сайта dev.example.com такой строчки нет.

При этом в контейнере nginx-backend конфигурации сайтов example.com
и dev.example.com идентичны между собой и отличаются только адресом
куда проксируются запросы через proxy_pass. Про эту строчку
в конфигурации nginx-frontend я уже и забыл, поэтому и сделал
ошибочное предположение, что nginx-backend по разному обрабатывает
конфигурацию в зависимости от того куда указывает proxy_pass,
потому что для сайта dev.example.com урл /download уходил
на proxy_pass а для example.com был 301 редирект.
В будущем постараюсь быть более внимательным.

--
Best regards,
 Gena
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить