نسخه اختصاصی Azure App Service برای XHTTP Relay
دارای اینستالر ویندوزی، پروفایلهای بهینه و تنظیمات پیشرفته برای استریم بدون قطعی.
📣 جهت دریافت اطلاعات و نکات بیشتر به کانال تلگرامی من مراجعه کنید: B3hnamR@
🔒 برای ساخت اکانت، مطالعه این آموزش کاملاً ضروری است: Anti-Ban-Tutorial.md
این نسخه دقیقاً برای زمانی طراحی شده که میخواهید XHTTP Relay را روی سرویسهای Azure App Service اجرا کنید، نه روی Vercel یا Netlify.
در این متد، یک Node.js Server دائمی روی App Service بالا میآید که:
- فایلهای استاتیک را از پوشه
public/سرو میکند. - ترافیک Relay را به سمت Inbound اصلی شما روی
TARGET_DOMAINهدایت میکند. - برای استریم و دانلودهای طولانی، hard timeout داخلی را غیرفعال میکند.
- برخلاف نسخههای Serverless، برای relay سنگینتر و پایدارتر مناسبتر است.
این پروژه یک Relay سبک و قدرتمند است که به صورت زیر عمل میکند:
- درخواست کاربر به دامنه اختصاصی Azure شما میرسد.
- مسیرهای عمومی مثل landing page بررسی میشوند.
- درخواستهای اصلی به آدرس Upstream شما، مثلاً
https://your-domain.com:443/api، فوروارد میشوند. - پاسخ دریافتی به صورت Stream و بدون وقفه به کاربر برگردانده میشود.
مسیر جریان ترافیک:
User Client -> Azure App Service -> TARGET_DOMAIN Inbound
برای استفادههای سنگین و استریم، Azure App Service معمولاً انتخاب بهتری نسبت به Functionهای کوتاهمدت است.
| ویژگی | Azure App Service | Vercel / Netlify |
|---|---|---|
| نوع اجرا | Node.js App دائمی | Serverless Functions / Rewrite |
| کنترل runtime | بالا | محدودتر |
| مناسب برای استریم طولانی | بهتر | وابسته به محدودیت duration |
| پروفایل نصب | B1 / B2 / B3 Trial-friendly | وابسته به پلن پلتفرم |
| مناسب برای | Relay دائمی و سنگین | پروژههای کوچکتر یا rewrite ساده |
- پروژه را دانلود یا clone کنید.
- فایل زیر را اجرا کنید:
Run-Deploy-Azure.bat
- اگر Azure CLI نصب نباشد، installer نسخه رسمی Microsoft Azure CLI را نصب میکند.
- اگر login نباشید، حالت ساده Device Login باز میشود.
- اطلاعات inbound و path را وارد میکنید.
- پروفایل deploy را انتخاب میکنید.
- اسکریپت App Service را میسازد و ZIP deploy انجام میدهد.
برای کاربر عادی نیازی به Service Principal، Client Secret یا token دستی نیست.
آدرس Inbound اصلی شماست و باید همراه با پروتکل و پورت وارد شود:
https://your-domain.com:443
https://sub.example.site:2053
اگر inbound شما path دارد، آن path را داخل RELAY_PATH وارد کنید، نه در انتهای TARGET_DOMAIN.
مسیری که روی Inbound تنظیم کردهاید.
مثال:
/api
در نسخه Azure، مقدار PUBLIC_RELAY_PATH به صورت خودکار برابر همین مقدار قرار میگیرد. یعنی اگر inbound path شما /api باشد، آدرس کلاینت نهایی هم روی Azure همین /api خواهد بود.
برای استفاده معمولی لازم نیست مقدار بدهید. فقط Enter بزنید تا غیرفعال بماند.
اگر امنیت اضافه میخواهید، یک مقدار وارد کنید. در این صورت کلاینت باید header زیر را بفرستد:
{
"headers": {
"x-relay-key": "YourPassword"
}
}اینستالر دارای پروفایلهای پیشفرض برای مدیریت بهتر منابع است، مخصوصاً برای اکانتهای Free Trial و credit اولیه Azure.
تعادل بین قدرت و هزینه:
SKU=B2
NODE=NODE:22-lts
MAX_INFLIGHT=256
UPSTREAM_TIMEOUT_MS=0
MAX_UP_BPS=0
MAX_DOWN_BPS=0
Always On=true
HTTP/2=true
WebSockets=true
برای تست سبک و کمهزینه:
SKU=B1
MAX_INFLIGHT=128
Timeout disabled
Speed limit disabled
بیشترین قدرت در لایه Basic:
SKU=B3
MAX_INFLIGHT=512
Timeout disabled
Speed limit disabled
برای تنظیم دستی:
SKU: B1 / B2 / B3
Node runtime: NODE:22-lts یا NODE:20-lts
MAX_INFLIGHT
UPSTREAM_TIMEOUT_MS
MAX_UP_BPS
MAX_DOWN_BPS
در Custom Build مقدار 0 برای timeout و speed limit یعنی غیرفعال.
برای استریم بدون قطعی از سمت خود برنامه:
UPSTREAM_TIMEOUT_MS=0
یعنی hard timeout داخلی relay خاموش است و تا وقتی upstream دیتا بدهد، خود کد relay دانلود طولانی را قطع نمیکند.
برای سرعت نامحدود:
MAX_UP_BPS=0
MAX_DOWN_BPS=0
اگر خواستید مصرف را کنترل کنید، مقدار را بر حسب bytes per second وارد کنید:
5242880 = حدود 5 MiB/s
10485760 = حدود 10 MiB/s
بر اساس IP سرور مقصد شما، اینستالر بهترین regionهای Azure را پیشنهاد میدهد.
برای کاربر ایران، مسیر واقعی این است:
Iran user -> Azure region -> Upstream inbound
پیشنهادهای معمول:
- برای سرورهای اروپا:
westeurope,uksouth,northeurope,germanywestcentral - برای سرورهای خاورمیانه:
uaenorth,qatarcentral
نتیجه نهایی به routing اپراتور و upstream بستگی دارد. بعد از deploy، با کلاینت واقعی benchmark بگیرید.
اگر پشت سر هم App Service Plan بسازید، Azure موقتاً شما را محدود میکند.
طبق داک رسمی Azure Resource Manager، اگر پاسخ throttling مقدار Retry-After بدهد، باید همان تعداد ثانیه صبر کنید. اگر Azure CLI این مقدار را نشان ندهد، زمان دقیق رسمی در خروجی وجود ندارد. چند دقیقه صبر کنید و اگر ممکن بود از App Service Plan قبلی reuse کنید.
داک رسمی:
https://learn.microsoft.com/azure/azure-resource-manager/management/request-limits-and-throttling
اگر از اکانت رایگان یا Trial استفاده میکنید، معمولاً بهتر است فقط از سری Basic استفاده کنید:
B1
B2
B3
سری Premium در اکانتهای رایگان یا بعضی subscriptionها ممکن است مسدود باشد.
index.js # Azure Node relay server
package.json # npm scripts
Deploy-Azure.ps1 # Windows installer & deploy script
Run-Deploy-Azure.bat # Easy launcher for Windows
scripts/prepare-build.mjs # Static frontend generator
templates/landing/ # Landing templates
public/ # Generated static frontend, ignored by git
$env:TARGET_DOMAIN="https://your-upstream-domain.com:443"
$env:RELAY_PATH="/api"
$env:PUBLIC_RELAY_PATH="/api"
npm run build
npm startسپس:
http://localhost:8080/
http://localhost:8080/health
http://localhost:8080/api
این پروژه تحت لایسنس MIT منتشر میشود.