через location.
Однако встала проблема, что не все сервисы могут запущены до поднятия самого nginx, вследствии чего он может не запускаться из-за отсутствия резолвинга по ДНС. Сделал попытку записать адрес проксируемого сервиса в переменную, как показано в доке https://www.nginx.com/blog/dns-service-discovery-nginx-plus/:
Т.к. все это работает в докере, то добавил в location resolver.
Запрос доходит до проксируемого сервиса, но инструкция proxy_redirect начинает отрабатывать циклически.
https://pastebin.com/7ufFBkvG - здесь пример одного такого location без использования переменных, в таком виде все работает.
Если же раскомментировать первые 3 строки и закомментировать четвертую, т.е. включить resolver и использование переменной, то начинаются циклические редиректы.
Можно ли это как-то побороть?
Когда у тебя используется proxy_pass http://pgadmin_container/, nginx отрезает от URI запроса префикс /pgadmin. Если ты заносишь апстрим в переменную, то URI передаётся как есть, даже если ты добавляешь после переменной слеш, или даже если ты этот слеш вместе с именем апстрима занесёшь в переменную. Режь префикс вручную: location /pgadmin/ { resolver 127.0.0.11 valid=30s; set $upstream_pgadmin pgadmin_container; rewrite ^/pgadmin(/.*) $1 break; proxy_pass http://$upstream_pgadmin; ...
кокер чтоль?
ага, докер
вообще-то, это - в профильный чат. а так - поставь require, например, в docker-compose.yml, чтобы дождаться, пока апстримы поднимутся. это - ещё один вариант
ну тут проблема вроде сугубо в конфигурации nginx за вариант спасибо, но там некоторые сервисы могут периодически отключать, из-за чего они будут отрубаться в nginx до перезагрузки, этого тоже хотелось бы избежать
На всякий случай напомню, что редиректы могут кешироваться браузером
я помню, в инкогнито проверяю и с разных браузеров все равно циклический редирект (
Странно... Но то, что префикс не режется, если имя апстрима в переменной, это точно, я на это натыкался. Точно нету слеша завершающего ни в имени апстрима, ни в proxy_pass? А то оно может его воспринять как URI запроса на апстрим.
в proxy_pass был Убрал -вроде что-то работает, сейчас буду дальше все проверять Большое спасибо!
Кстати Я тут глянул документацию по pgadmin А зачем вообще вся это хрень с переписыванием урлов, а особенно с sub_filter, если согласно документации он прекрасно себе поддерживает любой префикс через спецхедер X-Script-Name? https://www.pgadmin.org/docs/pgadmin4/development/container_deployment.html#http-via-nginx Второй пример sub_filter ощутимо просаживает производительность
Обсуждают сегодня