xhttp config

This commit is contained in:
2026-03-30 12:24:08 +03:00
parent 876428f78a
commit 7889aea6bd

224
remna_xhttp.sh Normal file
View File

@@ -0,0 +1,224 @@
#!/usr/bin/env bash
# ==========================================
# XHTTP NODE SETUP SCRIPT (PRODUCTION READY)
# ==========================================
# Что делает:
# 1. Генерирует конфиг ноды
# 2. Ждет подтверждения
# 3. Перезапускает node контейнер
# 4. Вставляет location блок в nginx
# 5. Проверяет nginx конфиг
# 6. В случае ошибки — открывает nano
# 7. Финальный чек-лист + XHTTP config
# ==========================================
set -e
# =========================
# CONFIG
# =========================
NGINX_CONF="/opt/remnawave/nginx.conf"
NODE_CONTAINER="remnanode"
NGINX_CONTAINER="remnawave-nginx"
# =========================
# UTILS
# =========================
# Yes/No (Enter = YES)
ask_yes_no() {
while true; do
read -r -p "$1 [Y/n]: " answer
if [[ -z "$answer" ]]; then
return 0
fi
case "$answer" in
[Yy]*) return 0 ;;
[Nn]*) echo "Повторите подтверждение." ;;
*) echo "Введите Y или N (Enter = Y)" ;;
esac
done
}
# Execute command safely
run_cmd() {
echo ">> $1"
if ! eval "$1"; then
echo "❌ Ошибка выполнения"
exit 1
fi
}
# =========================
# STEP 1 — NODE CONFIG
# =========================
read -r -p "Введите название ноды (например USA): " NODE_NAME
TAG="${NODE_NAME}_XHTTP"
echo
echo "========== СКОПИРУЙ И ВСТАВЬ =========="
cat <<EOF
{
"tag": "${TAG}",
"listen": "/dev/shm/xrxh.socket,0666",
"protocol": "vless",
"settings": {
"clients": [],
"fallbacks": [],
"decryption": "none"
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
},
"streamSettings": {
"network": "xhttp",
"xhttpSettings": {
"mode": "auto",
"path": "/xhttppath/",
"extra": {
"noSSEHeader": true,
"xPaddingBytes": "100-1000",
"scMaxBufferedPosts": 30,
"scMaxEachPostBytes": 1000000,
"scStreamUpServerSecs": "20-80"
}
}
}
}
EOF
echo "======================================="
echo
ask_yes_no "Вы вставили конфиг?"
echo "Перезапуск ноды..."
run_cmd "docker restart ${NODE_CONTAINER}"
# =========================
# STEP 2 — NGINX PATCH
# =========================
echo
echo "Проверка nginx конфига..."
if grep -q "grpc_pass unix:/dev/shm/xrxh.socket;" "$NGINX_CONF"; then
echo "✔ Блок уже существует"
else
echo "Добавляю location блок..."
# Backup
cp "$NGINX_CONF" "${NGINX_CONF}.bak"
TMP_FILE=$(mktemp)
# Insert after add_header
awk '
BEGIN { inserted=0 }
{
print
if ($0 ~ /add_header X-Robots-Tag/ && inserted==0) {
print " location /xhttppath/ {"
print " client_max_body_size 0;"
print " grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for;"
print " client_body_timeout 5m;"
print " grpc_read_timeout 315;"
print " grpc_send_timeout 5m;"
print " grpc_pass unix:/dev/shm/xrxh.socket;"
print " }"
inserted=1
}
}
' "$NGINX_CONF" > "$TMP_FILE"
mv "$TMP_FILE" "$NGINX_CONF"
fi
# =========================
# VALIDATE NGINX
# =========================
echo
echo "Проверка nginx конфигурации..."
if docker exec ${NGINX_CONTAINER} nginx -t; then
echo "✔ nginx конфиг валиден"
echo "Перезапуск nginx..."
run_cmd "docker restart ${NGINX_CONTAINER}"
else
echo "❌ nginx конфиг сломан!"
echo "Открываю nano..."
nano "$NGINX_CONF"
echo "Повторная проверка..."
if ! docker exec ${NGINX_CONTAINER} nginx -t; then
echo "❌ Ошибка не исправлена"
echo "Восстанавливаю бэкап..."
cp "${NGINX_CONF}.bak" "$NGINX_CONF"
exit 1
fi
echo "✔ Исправлено, перезапуск nginx..."
run_cmd "docker restart ${NGINX_CONTAINER}"
fi
# =========================
# STEP 3 — FINAL CHECKLIST
# =========================
echo
echo "=== Финальная проверка ==="
ask_yes_no "Создали хост?"
ask_yes_no "Настроили ли вы пути и защиту? (путь: /xhttppath/)"
echo
echo "========== ДОБАВЬ В XHTTP CONFIG =========="
cat <<EOF
{
"xmux": {
"cMaxReuseTimes": 0,
"maxConcurrency": "16-32",
"maxConnections": 0,
"hKeepAlivePeriod": 0,
"hMaxRequestTimes": "600-900",
"hMaxReusableSecs": "1800-3000"
},
"noGRPCHeader": false,
"xPaddingBytes": "100-1000",
"scMaxEachPostBytes": 1000000,
"scMinPostsIntervalMs": 30,
"scStreamUpServerSecs": "20-80"
}
EOF
echo "==========================================="
echo
ask_yes_no "Добавили ли вы XHTTP конфиг?"
ask_yes_no "Включили хост?"
ask_yes_no "Добавили конфиг к ноде?"
ask_yes_no "Добавили в внутренний сквад?"
# =========================
# FINAL STEP
# =========================
echo
echo "Финальный перезапуск ноды..."
run_cmd "docker restart ${NODE_CONTAINER}"
echo
echo "✅ Готово"