исправление: задержка и повторы при старте + правильный 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"
|
||||
DESC="rProxy reverse proxy tunnels"
|
||||
|
||||
# Задержка перед первым запуском (секунды)
|
||||
# Даёт время остальным сервисам стартовать
|
||||
BOOT_DELAY=30
|
||||
|
||||
# Количество попыток и пауза между ними
|
||||
MAX_RETRIES=3
|
||||
RETRY_DELAY=15
|
||||
|
||||
start() {
|
||||
echo "Starting $DESC..."
|
||||
|
||||
# Задержка при старте — даём время сети и сервисам подняться
|
||||
echo " Ожидание $BOOT_DELAY сек (инициализация сети и сервисов)..."
|
||||
sleep $BOOT_DELAY
|
||||
|
||||
# Первая попытка
|
||||
/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() {
|
||||
|
|
|
|||
49
rproxy
49
rproxy
|
|
@ -464,18 +464,53 @@ do_add_interactive() {
|
|||
|
||||
msg "Добавляю сервис '$name'..."
|
||||
|
||||
# Конфиг nginx (упрощенная генерация)
|
||||
local nginx_conf
|
||||
# Генерация конфига nginx
|
||||
# Host передаём как адрес целевого сервиса, чтобы бэкенд не отклонял запрос
|
||||
# (например, веб-морда роутера проверяет Host и отказывает при несовпадении)
|
||||
local tmp="/tmp/rproxy_$name.conf"
|
||||
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
|
||||
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
|
||||
|
||||
# Деплой
|
||||
local tmp="/tmp/rproxy_$name.conf"
|
||||
echo "$nginx_conf" > "$tmp"
|
||||
scp_cmd "$tmp" "$VPS_USER@$VPS_HOST:$REMOTE_NGINX_DIR/rproxy_$name.conf" || { err "Ошибка деплоя nginx"; pause; return; }
|
||||
scp_cmd "$tmp" "$VPS_USER@$VPS_HOST:$REMOTE_NGINX_DIR/rproxy_$name.conf" || { err "Ошибка деплоя nginx"; rm -f "$tmp"; pause; return; }
|
||||
ssh_cmd "nginx -t && systemctl reload nginx" >/dev/null 2>&1
|
||||
|
||||
# SSL если нужно
|
||||
|
|
|
|||
Loading…
Reference in New Issue