исправление: задержка и повторы при старте + правильный Host для nginx прокси (v1.1.5)
This commit is contained in:
parent
330e4bc0d1
commit
8b03ea2518
42
S98rproxy
42
S98rproxy
|
|
@ -6,9 +6,51 @@ ENABLED=yes
|
||||||
PROCS="rproxy"
|
PROCS="rproxy"
|
||||||
DESC="rProxy reverse proxy tunnels"
|
DESC="rProxy reverse proxy tunnels"
|
||||||
|
|
||||||
|
# Задержка перед первым запуском (секунды)
|
||||||
|
# Даёт время остальным сервисам стартовать
|
||||||
|
BOOT_DELAY=30
|
||||||
|
|
||||||
|
# Количество попыток и пауза между ними
|
||||||
|
MAX_RETRIES=3
|
||||||
|
RETRY_DELAY=15
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
echo "Starting $DESC..."
|
echo "Starting $DESC..."
|
||||||
|
|
||||||
|
# Задержка при старте — даём время сети и сервисам подняться
|
||||||
|
echo " Ожидание $BOOT_DELAY сек (инициализация сети и сервисов)..."
|
||||||
|
sleep $BOOT_DELAY
|
||||||
|
|
||||||
|
# Первая попытка
|
||||||
/opt/bin/rproxy start
|
/opt/bin/rproxy start
|
||||||
|
|
||||||
|
# Повторные попытки для сервисов, которые не смогли стартовать
|
||||||
|
local attempt=1
|
||||||
|
while [ "$attempt" -le "$MAX_RETRIES" ]; do
|
||||||
|
sleep $RETRY_DELAY
|
||||||
|
|
||||||
|
# Проверяем, все ли сервисы запущены
|
||||||
|
local total=0 running=0
|
||||||
|
for f in /opt/etc/rproxy/services/*.conf; do
|
||||||
|
[ -f "$f" ] || continue
|
||||||
|
. "$f"
|
||||||
|
[ "$SVC_ENABLED" != "yes" ] && continue
|
||||||
|
total=$((total + 1))
|
||||||
|
if pgrep -f "ssh.*$SVC_TUNNEL_PORT:$SVC_TARGET_HOST" >/dev/null 2>&1; then
|
||||||
|
running=$((running + 1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Если все сервисы запущены — выходим
|
||||||
|
if [ "$running" -ge "$total" ] || [ "$total" -eq 0 ]; then
|
||||||
|
echo " Все $total сервисов запущены."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " Попытка $attempt/$MAX_RETRIES: запущено $running/$total, перезапускаю отсутствующие..."
|
||||||
|
/opt/bin/rproxy start
|
||||||
|
attempt=$((attempt + 1))
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
stop() {
|
stop() {
|
||||||
|
|
|
||||||
49
rproxy
49
rproxy
|
|
@ -464,18 +464,53 @@ do_add_interactive() {
|
||||||
|
|
||||||
msg "Добавляю сервис '$name'..."
|
msg "Добавляю сервис '$name'..."
|
||||||
|
|
||||||
# Конфиг nginx (упрощенная генерация)
|
# Генерация конфига nginx
|
||||||
local nginx_conf
|
# Host передаём как адрес целевого сервиса, чтобы бэкенд не отклонял запрос
|
||||||
|
# (например, веб-морда роутера проверяет Host и отказывает при несовпадении)
|
||||||
|
local tmp="/tmp/rproxy_$name.conf"
|
||||||
if [ -n "$domain" ]; then
|
if [ -n "$domain" ]; then
|
||||||
nginx_conf="server { listen 80; server_name $domain; location / { proxy_pass http://127.0.0.1:$tunnel_port; proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; } }"
|
cat > "$tmp" << NGINXEOF
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name $domain;
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:$tunnel_port;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade \$http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_set_header Host $t_host:$t_port;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||||
|
proxy_connect_timeout 60s;
|
||||||
|
proxy_send_timeout 60s;
|
||||||
|
proxy_read_timeout 60s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NGINXEOF
|
||||||
else
|
else
|
||||||
nginx_conf="server { listen $ext_port; location / { proxy_pass http://127.0.0.1:$tunnel_port; proxy_set_header Host \$host; } }"
|
cat > "$tmp" << NGINXEOF
|
||||||
|
server {
|
||||||
|
listen $ext_port;
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:$tunnel_port;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade \$http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_set_header Host $t_host:$t_port;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||||
|
proxy_connect_timeout 60s;
|
||||||
|
proxy_send_timeout 60s;
|
||||||
|
proxy_read_timeout 60s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NGINXEOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Деплой
|
# Деплой
|
||||||
local tmp="/tmp/rproxy_$name.conf"
|
scp_cmd "$tmp" "$VPS_USER@$VPS_HOST:$REMOTE_NGINX_DIR/rproxy_$name.conf" || { err "Ошибка деплоя nginx"; rm -f "$tmp"; pause; return; }
|
||||||
echo "$nginx_conf" > "$tmp"
|
|
||||||
scp_cmd "$tmp" "$VPS_USER@$VPS_HOST:$REMOTE_NGINX_DIR/rproxy_$name.conf" || { err "Ошибка деплоя nginx"; pause; return; }
|
|
||||||
ssh_cmd "nginx -t && systemctl reload nginx" >/dev/null 2>&1
|
ssh_cmd "nginx -t && systemctl reload nginx" >/dev/null 2>&1
|
||||||
|
|
||||||
# SSL если нужно
|
# SSL если нужно
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue