From 3fd55091865cce9207636b246d15daf7e047edc2 Mon Sep 17 00:00:00 2001 From: lendry Date: Mon, 29 Jun 2026 17:00:12 +0300 Subject: [PATCH] fix and update --- install.sh | 123 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 89 insertions(+), 34 deletions(-) diff --git a/install.sh b/install.sh index 8897e7b..59b849a 100644 --- a/install.sh +++ b/install.sh @@ -1673,6 +1673,58 @@ nginx_proxy_headers=" proxy_set_header Host \$host; proxy_read_timeout 300s; proxy_connect_timeout 75s;" +# Встроенный DNS Docker. В docker-режиме nginx обязан перерезолвлять имена +# бэкенд-контейнеров на каждый запрос — иначе после пересборки контейнера +# (новый IP) остаётся закешированный старый адрес и все ответы становятся 502. +NGINX_DOCKER_RESOLVER=" resolver 127.0.0.11 ipv6=off valid=10s;" + +# Имя nginx-переменной из ключа апстрима (только [A-Za-z0-9_]). +nginx_upstream_var() { + printf 'idp_up_%s' "$(printf '%s' "$1" | tr -c 'A-Za-z0-9' '_')" +} + +# proxy_pass к КОРНЮ апстрима ($request_uri сохраняет путь и query). +# docker: через resolver+переменную (переживает смену IP контейнера). +# host: статический proxy_pass на 127.0.0.1 (DNS-кеша нет, IP не меняется). +render_proxy_root() { + local key="$1" up var + up="$(nginx_upstream "$key")" + if [[ "$NGINX_MODE" == "docker" ]]; then + var="$(nginx_upstream_var "$key")" + printf '%s\n set $%s %s;\n proxy_pass $%s$request_uri;' \ + "$NGINX_DOCKER_RESOLVER" "$var" "$up" "$var" + else + printf ' proxy_pass %s;' "$up" + fi +} + +# proxy_pass с заменой пути на фиксированный ($2, например /ws или /oauth/). +# Используется там, где префикс локейшна нужно «срезать»/заменить. +render_proxy_rewrite() { + local key="$1" target="$2" up var + up="$(nginx_upstream "$key")" + if [[ "$NGINX_MODE" == "docker" ]]; then + var="$(nginx_upstream_var "$key")" + printf '%s\n set $%s %s;\n rewrite ^.*$ %s break;\n proxy_pass $%s;' \ + "$NGINX_DOCKER_RESOLVER" "$var" "$up" "$target" "$var" + else + printf ' proxy_pass %s%s;' "$up" "$target" + fi +} + +# proxy_pass для /idp-api/ — срезает префикс /idp-api/ и проксирует на корень. +render_proxy_idp_api() { + local key="api" up var + up="$(nginx_upstream "$key")" + if [[ "$NGINX_MODE" == "docker" ]]; then + var="$(nginx_upstream_var "$key")" + printf '%s\n set $%s %s;\n rewrite ^/idp-api/(.*)$ /$1 break;\n proxy_pass $%s;' \ + "$NGINX_DOCKER_RESOLVER" "$var" "$up" "$var" + else + printf ' proxy_pass %s/;' "$up" + fi +} + nginx_write_conf() { local conf="$1" if [[ "$NGINX_MODE" == "docker" ]]; then @@ -1743,11 +1795,11 @@ EOF build_ws_block() { local ws_on_api="$1" [[ "$ws_on_api" != "true" ]] && return 0 - local upstream - upstream="$(nginx_upstream ws)" + local proxy_ws + proxy_ws="$(render_proxy_rewrite ws /ws)" cat <