نسخه سبک و بهینهشده XHTTP Relay روی Node Runtime ورسل
داستان این نسخه چیه؟
🟥 نسخه ECO طوری تیون شده که علاوه بر امنیت سفتوسخت v1.3، کمهزینهترین رفتار ممکن روی Vercel Pro رو داشته باشه؛ یعنی با کنترل هوشمند Timeout، Inflight، Throttle و Logها، مصرف منابع و هزینه نهایی تا جای ممکن پایین نگه داشته میشه.
📣 جهت دریافت اطلاعات و نکات بیشتر به کانال تلگرامی من مراجعه کنید: B3hnamR@. 📌 نکته مهم: لطفاً این راهنما رو تا انتها و با دقت بخونید تا موقع ستاپ کردن هیچ مشکلی براتون پیش نیاد.
🔒 برای ساخت اکانت، مطالعه این آموزش کاملاً ضروری است: Anti-Ban-Tutorial.md
توجه خیلی مهم: این پروژه بهخودیخود هیچ تاثیری در بن شدن اکانت ندارد؛ عامل بن فقط فرآیند ساخت اکانت است و این موضوع 100% تست شده.
توجه خیلی مهم: با ساخت رایگان اکانت پرو ترایال میتونید استفاده کنید ❤️
⚠️ هشدار خیلی مهم رفقا لطفا پروژه رو به هیچوجه Fork نکنید. برای اینکه اکانتتون امن بمونه و شبکهتون شناسایی نشه، فقط از روش دستی (Vercel CLI) که پایینتر توضیح دادم برای دیپلوی استفاده کنید.
- ⏱️ کنترل تایماوت:
UPSTREAM_TIMEOUT_MSرو پیشفرض گذاشتیم روی25000که واسه کانکشنهای طولانی جواب بده. - 🛡️ بستن متدهای اضافه: فقط با
GET،HEADوPOSTکار میکنه تا امنیت بالاتر بره. - 🧹 تمیزکاری هدرها: هدرهای اضافی پلتفرم و hop-by-hop رو بیرحمانه فیلتر میکنیم.
- 🔑 قفل امنیتی: احراز هویت فقط از طریق هدر
x-relay-keyانجام میشه (توی کوئری دیگه قبول نمیکنه). - 🛣️ مسیر سفتوسخت: متغیر
RELAY_PATHاجباریه. اگر درست ست نشه کلا کانکشن بسته میشه. - 🌐 ظاهر استاتیک خودکار: موقع Build یک Frontend استاتیک تولید میشه تا دامنه فقط API-محور دیده نشه.
- 🔀 مسیر عمومی جدا: با
PUBLIC_RELAY_PATHمیتونی مسیر عمومی (مثلاً/api) رو از مسیر واقعی upstream جدا کنی. - 🎲 تمپلیت رندم در هر بیلد: لندینگ از
templates/landing/*انتخاب میشه (قابل قفل شدن با ENV). - 🐛 لاگهای به درد بخور: لاگهای مربوط به تایماوت، ارورها و مدتزمان کانکشن رو واضحتر کردیم تا دیباگ راحت بشه.
- 🐢 سرعت دستساز: روی آپلود و دانلود محدودیت سرعت (Throttling) واقعی گذاشتیم.
- 📉 دوستدار منابع: کلا بردیمش روی Node runtime با لیمیت ۱۲۸ مگابایت رم و مدیریت کانکشنهای همزمان.
این برنامه روی سرورلسهای Node اجرا میشه و سه تا لایه اصلی داره:
۱. لایه امنیت: همون هسته v1.3 هست که مسیر، متدها و پسورد رو چک میکنه.
۲. لایه کنترل منابع: با MAX_INFLIGHT نمیذاریم یهو صدتا درخواست همزمان بریزه رو سر سرور و کرش کنه.
۳. لایه کنترل ترافیک: با MAX_UP_BPS و MAX_DOWN_BPS پهنای باند رو محدود میکنیم. نتیجهاش میشه یه سرعت پایدار اما با مصرف خیلی کمتر.
برای رفقایی که حال و حوصله درگیری با ترمینال و تایپ کردن دستورات رو ندارن، یه اسکریپت خودکار (ویندوزی) آماده کردیم که صفر تا صد کار رو خودش انجام میده! دو تا فایل برای این کار اضافه شده: Run-Deploy-Windows.bat و Deploy-Windows.ps1.
چطور ازش استفاده کنیم؟
۱. فایل ZIP پروژه رو Extract کن.
۲. حتماً فیلترشکنت رو روی حالت TUN Mode (تونل کل سیستم) روشن کن که موقع دانلود پیشنیازها به ارور تحریم نخوری.
۳. روی فایل Run-Deploy-Windows.bat دابلکلیک کن.
۴. اسکریپت ازت مقدارهای لازم (مثل دامنه و مسیر) رو میپرسه؛ واردشون کن و تمام!
این اسکریپت دقیقاً چیکار میکنه؟
- اگه
npmیاvercelرو سیستمت نصب نباشه، خودش پیدا میکنه و نصب میکنه. - وضعیت لاگین اکانتت رو چک میکنه.
- لیست پروژههای اکانت Vercel رو میخونه تا پروژه موجود انتخاب کنی یا NEW بسازی.
- متغیرهای محیطی (ENV) رو اتوماتیک روی
productionست میکنه. - دیپلوی نهایی رو انجام میده و همونجا لینک نهایی سایت رو تحویلت میده.
- دیفالت اقتصادی
v1.3.6رو هم اعمال میکنه:MAX_INFLIGHT=128،MAX_UP_BPS=2621440،MAX_DOWN_BPS=2621440،UPSTREAM_TIMEOUT_MS=50000(دیفالت اینستالر) و ENVهای کنترل لاگ (SUCCESS_LOG_SAMPLE_RATE،SUCCESS_LOG_MIN_DURATION_MS،ERROR_LOG_MIN_INTERVAL_MS). - مسیر عمومی API (
PUBLIC_RELAY_PATH) رو هم ست میکنه تا ترافیک Relay همیشه از همون prefix رد بشه (دیفالت:/api). - لندینگ استاتیک رو موقع Build از تمپلیتهای داخل پروژه میسازه و پیشفرض بهصورت رندم انتخاب میکنه.
حالتهای لاگین داخل اسکریپت:
[1] Use existing login session[2] Token mode(پیشنهادی)
در Token mode میتونی توکن رو امن داخل همون پوشه پروژه ذخیره کنی (.vercel-token.dpapi) تا دفعههای بعد لازم نباشه دوباره واردش کنی.
رفتار اجرای اول (وقتی پروژه لینک نیست):
- اسکریپت لیست پروژههای اکانت Vercel رو میگیره.
- گزینهها رو شمارهبندیشده نشون میده.
- یه گزینه
Deploy as NEW projectهم آخر لیست میاره. - تا وقتی یک گزینه معتبر انتخاب نکنی، جلو نمیره.
پنل مدیریت بعد از دیپلوی: حتی بعد از اینکه پروژهت ساخته شد، باز هم میتونی این فایل رو باز کنی. یه منوی ترتمیز بهت میده که میتونی این کارا رو بکنی:
Select project from Vercel list: انتخاب پروژه از لیست اکانت.Redeploy selected project: دیپلوی مجدد روی پروژه انتخابشده.Update production env vars (selected project): آپدیت کردن متغیرها و سرعتها.List recent deployments (selected project): دیدن لیست دیپلویهای اخیر.Deploy as NEW project: ساختن یه پروژه کاملاً جدید.Run health + smoke checks: تست سریع سلامت مسیرها بعد از دیپلوی.Show professional logs (translated/compact): خلاصه لاگهای خطامحور به شکل قابلفهم.Run load-test lite: تست فشار سبک برای چک اولیه پایداری.ENV drift detector: بررسی اینکه ENVهای لازم وجود دارند و از پروفایل انتخابی Drift نکرده باشند.Profile benchmark runner: گرفتن یک بنچمارک جمعوجور روی پروفایلهای آماده.Live logs (translated/compact): نمایش زنده لاگها تا وقتیQبزنی.View deployment ENV config (full): دیدن وضعیت کامل ENVهای پروژه.Delete selected project (DANGER): حذف پروژه انتخابشده از Vercel (با تایید نهایی).
تغییر ماهیت ریز هر Deploy (Randomization): برای اینکه همه با Fingerprint یکسان دیپلوی نکنن، اسکریپت قبل از Deploy اینها رو موقت رندوم میکنه:
package.json:name،version،descriptionvercel.json:name
بعد از پایان Deploy (حتی اگر Fail بشه)، فایلهای لوکال به حالت اصلی برمیگردن.
💡 نکته: هر جای کار خواستی اسکریپت رو متوقف کنی کافیه
Ctrl + Cرو بزنی.RELAY_PATHباید دقیقاً با Path تنظیمات سرور خارجت یکی باشه.PUBLIC_RELAY_PATHفقط مسیر عمومی روی دامنه Vercel خودته (دیفالت:/api).
مودهای دیپلوی داخل اینستالر (Preset):
ECO_MIN_COST: حالت اقتصادی (Node + Fluid OFF) با کمترین هزینه پایدار.BALANCED_LOW_TIMEOUT: بالانس سرعت/هزینه (Node + Fluid ON).MAX_STABILITY_HIGH_CONN: برای اتصال همزمان بالاتر و پایداری بیشتر (Node + Fluid ON).STRESS_TEST: حالت تهاجمی برای تست فشار (Node + Fluid ON).FAST_PIPE_REWRITE_SECURE: حالت Rewrite سریع با قفل اختیاری هدرx-relay-key.CUSTOM_BUILD: همهچی دستی، برای کسی که تنظیم اختصاصی میخواد.
نکته مهم درباره Rewrite mode:
- اگر
RELAY_KEYرو خالی بزاری، Rewrite بدون قفل هدر deploy میشه. - اگر
RELAY_KEYبدی، فقط درخواستهایی که هدرx-relay-keyدرست داشته باشن عبور میکنن. - اگر Rewrite رو با
RELAY_KEYساختی، توی کلاینت باید هدر رو دستی بفرستی؛ وگرنه معمولاً403یا404میگیری. - جای این هدر در اغلب کلاینتها بخش
XHTTP Extraهست.
تنظیم کلاینت برای Rewrite Secure (وقتی RELAY_KEY ست شده):
در قسمت XHTTP Extra این JSON رو وارد کن (کلید رو با مقدار خودت جایگزین کن):
{
"headers": {
"x-relay-key": "YourStrongKey"
}
}خلاصه خیلی ساده Rewrite mode:
AddressوSNI: دامنه فرانت (مثلnextjs.org)Host: دامنه Vercel پروژه خودتPath: همونPUBLIC_RELAY_PATH(مثلاً/api)- اگر
RELAY_KEYفعاله: حتماً هدرx-relay-keyرو درXHTTP Extraبفرست
هوشمندسازی Region در اینستالر:
- اسکریپت از روی
TARGET_DOMAIN، DNS رو چک میکنه و یک Region پیشنهادی میده. - اگر DNS لوکال و DNS عمومی متفاوت باشن، هشدار میده و پیشنهاد رو با DNS عمومی میسازه.
- انتخاب نهایی Region همیشه دست خود کاربره.
سینک خودکار Deployment Protection:
- هنگام دیپلوی، اسکریپت تلاش میکنه
Vercel Authenticationپروژه رو خودکار خاموش کنه تا دسترسی عمومی درست کار کنه. - اگر API اجازه نده، پیام شفاف میده که از Dashboard خاموشش کنی.
لندینگ رندم چطور کار میکنه؟
- تمپلیتها داخل مسیر
templates/landing/هستند. - هر تمپلیت حداقل باید
index.htmlداشته باشد (و معمولاًstyles.cssهم دارد). - در هر Build یک تمپلیت انتخاب میشود و به
public/کپی میشود. - توکنهای زیر داخل تمپلیتها بهصورت خودکار جایگزین میشوند:
{{BUILD_CODE}}،{{PUBLIC_RELAY_PATH}}،{{RELAY_PATH}}،{{GENERATED_AT}}،{{TEMPLATE_NAME}}
فایل پروژه رو به صورت ZIP دانلود و اکسترکت کن.
(راستی، بعد از اکسترکت کردن میتونی فایلهای .gitignore و README.md رو کلاً از تو پوشه پاک کنی، نیازی بهشون نیست).
اول ابزار ورسل رو نصب کن:
npm i -g vercelحالا با دستور cd برو به همون مسیری که فایلهای پروژه رو اکسترکت کردی:
cd /Your/Path/To/Folderو وارد اکانتت بشو:
vercel loginتو همون مسیر این دستور رو بزن و سوالات رو با زدن Enter رد کن تا پروژه بره بالا:
vercel deployدر صفحه اصلی ورسل، روی پروژهای که ساختی کلیک کن تا وارد صفحهاش بشی. حالا از نوار سمت راست روی گزینه Environment Variables کلیک کن و دکمه Add Environment Variable رو بزن.
در صفحهای که باز میشه، مقادیر TARGET_DOMAIN و RELAY_PATH رو باید بهصورت اجباری وارد کنی:
-
تنظیم TARGET_DOMAIN: در فیلد
KeyعبارتTARGET_DOMAINرو بنویس و در فیلدValue، آدرس دامنه خودت رو به همراه پورت اینباند وارد کن. به این صورت:https://YOUR-DOMAIN-ADDRESS:INBOUNDPORT -
تنظیم RELAY_PATH: مجدداً دکمه Add رو بزن. در فیلد
KeyعبارتRELAY_PATHرو بنویس و در قسمتValue، همون مقداری رو وارد کن که تو پنل XUI برای بخش Path اینباندت ست کردی (مثلاً/apiیا/yourpath). اگر تا الان Path نذاشتی، اینباندت رو ویرایش کن و یه Path براش بذار و همون رو اینجا بنویس. -
تنظیم PUBLIC_RELAY_PATH (پیشنهادی): برای اینکه مسیر عمومی Relay روی دامنه ورسل ثابت و طبیعی بمونه، یک ENV با
KeyبرابرPUBLIC_RELAY_PATHبساز و مقدارش رو معمولاً/apiبذار. -
تنظیم LANDING_TEMPLATE (اختیاری): اگر میخوای در هر Deploy دقیقاً یک تمپلیت ثابت بیاد بالا،
LANDING_TEMPLATEرو برابر نام پوشه تمپلیت بذار (مثلforge-stack). اگر نذاری، هر بیلد رندم انتخاب میشه.
💡 مهم: اگر میخوای مقادیر ENV در ابزار Inspector اینستالر قابلنمایش باشند، متغیرها رو
Sensitiveنساز. بعضی اکانتها/تیمها با Policy داخلی مقدارها رو Mask میکنن که در این حالت Inspector فقط(hidden/sensitive)نشون میده.
مقادیر ENV رو میتونی دقیقاً طبق جدول زیر ست کنی:
| متغیر | وضعیت | مقدار دیفالت v1.3.6 | توضیح |
|---|---|---|---|
TARGET_DOMAIN |
🔴 اجباری | - | آدرس Upstream مثل https://domain:port |
RELAY_PATH |
🔴 اجباری | - | مسیر اینباند؛ باید دقیقاً با مسیر سرور خارج یکی باشه (مثلاً /api) |
PUBLIC_RELAY_PATH |
⚪ اختیاری | /api |
مسیر عمومی روی دامنه Vercel که درخواست Relay ازش وارد میشه |
LANDING_TEMPLATE |
⚪ اختیاری | - | اگر ست کنی، همون تمپلیت انتخاب میشه (مثلاً forge-stack) |
AUTO_FRONTEND |
⚪ اختیاری | 1 |
اگر 0 بشه، تولید خودکار لندینگ غیرفعال میشه |
UPSTREAM_TIMEOUT_MS |
⚪ اختیاری | 25000 |
سقف انتظار برای پاسخ upstream؛ کمترش یعنی قطع سریعتر و مصرف کمتر |
MAX_INFLIGHT |
⚪ اختیاری | 128 |
سقف درخواست همزمان داخل هر instance |
MAX_UP_BPS |
⚪ اختیاری | 2621440 |
سقف آپلود به بایت بر ثانیه (حدود 20Mbps) |
MAX_DOWN_BPS |
⚪ اختیاری | 2621440 |
سقف دانلود به بایت بر ثانیه (حدود 20Mbps) |
SUCCESS_LOG_SAMPLE_RATE |
⚪ اختیاری | 0 |
نرخ نمونهگیری لاگ موفقها (برای کاهش هزینه لاگ) |
SUCCESS_LOG_MIN_DURATION_MS |
⚪ اختیاری | 3000 |
فقط درخواستهای کندتر از این مقدار لاگ موفق میخورند |
ERROR_LOG_MIN_INTERVAL_MS |
⚪ اختیاری | 5000 |
حداقل فاصله بین لاگ خطاها (جلوگیری از انفجار لاگ) |
RELAY_KEY |
⚪ اختیاری | - | اگر ست بشه، فقط با x-relay-key معتبر اجازه عبور میده |
ℹ️ نکته مهم درباره Timeout: دیفالت هسته پروژه
25000هست، ولی اینستالر ویندوز برای پایداری بیشتر مقدار اولیه50000پیشنهاد میده.
دیفالت اقتصادی هسته پروژه (اگر ENV ست نکنی):
MAX_INFLIGHT=128
MAX_UP_BPS=2621440
MAX_DOWN_BPS=2621440
UPSTREAM_TIMEOUT_MS=25000
دیفالت پیشنهادی اینستالر ویندوز (برای استفاده واقعی):
MAX_INFLIGHT=128
MAX_UP_BPS=2621440
MAX_DOWN_BPS=2621440
UPSTREAM_TIMEOUT_MS=50000
(توجه: نیازی به ست کردن RELAY_KEY نیست مگه اینکه واقعاً بخوای رو پروژهت پسورد بذاری).
خبر خوب اینه که دیگه نیازی به ترمینال نیست! همون لحظه که متغیرها رو تو سایت ورسل Save میکنی، یه پاپآپ (Pop-up) همون پایین صفحه میاد که دکمه Redeploy داره. همون رو بزن تا پروژه با تنظیمات جدیدت دوباره ساخته بشه و آماده کار بشه.
بعد از اینکه Deploy تموم شد، اینستالر خودش میتونه تستهای ضروری رو بگیره:
Health Check:Root: 200یعنی روت دامنه بالا هست.API: 400در تست خام معمولاً طبیعیه و به معنی خراب بودن تونل نیست (چون Probe سادهست، نه هندشیک کامل کلاینت).
Smoke Tests:- مسیر اشتباه باید
404بده. - متد اشتباه باید
405بده. - مسیر درست Relay باید
non-404باشه (معمولاً400یا200میبینی که هر دو در تست خام قابل قبوله).
- مسیر اشتباه باید
برای عیبیابی سریع:
- گزینه
Show professional logsرو با پنجره زمانی بزرگتر اجرا کن. - گزینه
Live logsرو باز کن و همزمان از کلاینت ping/test بزن. - گزینه
ENV drift detectorرو بزن تا بفهمی ENVهای پروفایل درست ست شدن یا نه. - گزینه
View deployment ENV configرو بزن تا وضعیت ENVها و زمان آخرین آپدیت رو ببینی.
متغیرهای MAX_UP_BPS و MAX_DOWN_BPS بر اساس «بایت بر ثانیه» کار میکنن. اگه میخوای سرعتت رو بر اساس مگابیت (Mbps) تنظیم کنی، فرمولش اینه:
فرمول: سرعت مد نظر شما (به مگابیت) × 131072
مثلاً اگه میخوای سرعتت رو روی ۵۰ مگابیت قفل کنی: 50 × 131072 = 6553600
چند تا مثال آماده برای کپی کردن:
- 10 Mbps →
1310720 - 12 Mbps →
1572864 - 15 Mbps →
1966080 - 20 Mbps →
2621440
این نسخه با هدف «اقتصادیترین حالت پایدار» تیون شده.
دیفالت فعلی پروژه روی این مقادیره:
MAX_INFLIGHT=128
MAX_UP_BPS=2621440
MAX_DOWN_BPS=2621440
UPSTREAM_TIMEOUT_MS=25000
SUCCESS_LOG_SAMPLE_RATE=0
SUCCESS_LOG_MIN_DURATION_MS=3000
ERROR_LOG_MIN_INTERVAL_MS=5000
Function Invocations(تعداد فراخوانیها)Fluid Active CPU(زمان واقعی اجرای CPU)Fluid Provisioned Memory(زمان فعال بودن مموری)Fast Origin Transfer(ترافیک رفت/برگشت بین CDN و Function)Observability Events(حجم لاگها)
- هزینه Invocation:
invocations / 1,000,000 × $0.60 - هزینه Fast Origin Transfer (تقریبی):
origin_gb × نرخ منطقه - هزینه CPU و Memory:
active_cpu_hours × نرخ CPU منطقه + provisioned_gb_hours × نرخ Memory منطقه
Invocations: حدود$0.60 / 1MFast Origin Transfer: شروع از حدود$0.06 / GB(وابسته به ریجن)Active CPU: شروع از حدود$0.128 / ساعتProvisioned Memory: شروع از حدود$0.0106 / GB-hour
یعنی اگر مصرفت مثل تستهای سبک روزانه باشه، معمولاً فشار هزینه اصلی از تعداد Invocation + Origin Transfer + لاگ زیاد میاد؛
برای همین توی v1.3.6 لاگها Rate-limit و Sample شدن تا هزینه Observability هم تا حد ممکن بیاد پایین.
این اعداد صرفاً پیشنهادن. همونی که به کارت میاد رو کپی کن:
MAX_INFLIGHT=16
MAX_UP_BPS=1310720
MAX_DOWN_BPS=1310720
MAX_INFLIGHT=48
MAX_UP_BPS=1572864
MAX_DOWN_BPS=1572864
MAX_INFLIGHT=128
MAX_UP_BPS=2621440
MAX_DOWN_BPS=2621440
MAX_INFLIGHT=192
MAX_UP_BPS=1966080
MAX_DOWN_BPS=1966080
MAX_INFLIGHT=256
MAX_UP_BPS=1310720
MAX_DOWN_BPS=1310720
برای اینکه ببینی کانفیگی که ست کردی چطور داره کار میکنه، توی همون داشبورد ورسل روی پروژهات کلیک کن و برو به تب Logs. بعد از اینکه مقادیر زیر رو ست کردی:
MAX_INFLIGHT=
MAX_UP_BPS=
MAX_DOWN_BPS=
شروع کن به استفاده از کانکشن. اگر تو بخش لاگها دیدی مدام داره ارور 503 میده، یعنی ترافیک گیر کرده و ظرفیتت پر شده. تو این حالت باید بری دوباره با این سه تا عدد بازی کنی و یکم ببریشون بالاتر تا مشکل حل بشه و به بهترین حالت برای سرورت برسی.
vless://UUID-HERE@vercel.com:443?encryption=none&security=tls&sni=vercel.com&fp=chrome&alpn=h2&insecure=0&allowInsecure=0&type=xhttp&host=YOUR-VERCEL-DOMAIN&path=%2Fapi&mode=auto#XHTTP-ECO
(یادت نره دامنه ورسل خودت رو جایگزین کنی و path رو همون چیزی بذاری که تو PUBLIC_RELAY_PATH ست کردی. %2F همون کاراکتر اسلش / هست).
200: همهچی عالیه و وصلی.403: پسوردی که توx-relay-keyزدی غلطه.404: مسیری که تو کلاینت زدی باPUBLIC_RELAY_PATHهمخونی نداره.405: متد درخواستی غیرمجازه.500: متغیرهای محیطی (ENV) رو درست ست نکردی.502: تونل نمیتونه به سرور اصلیت (Upstream) وصل بشه.503: ترافیک همزمان بالاست و به سقفMAX_INFLIGHTرسیدی. (اگه زیاد دیدیش برو تو بخش Logs با اعداد بازی کن).504: سرور اصلیت جواب نمیده (تایماوت).
باید یادی کنیم از منبع اصلی این حرکت؛ این پروژه در واقع فورک و توسعهیافته از ایدههای ناب و زحمات بچههای کانال تلگرامی Avaco Cloud هست. دم تیم آواکو کلاود گرم که این مسیر رو برای وبگردی آزاد و توسعه ابزارهای اینچنینی باز کردن. حتماً به کانالشون سر بزنید و از محتواشون حمایت کنید! 🤝
اگر این پروژه براتون مفید بود و دوست داشتید از ادامه توسعهاش حمایت کنید، میتونید از آدرسهای زیر استفاده کنید:
Tron (TRX) / USDT (TRC-20) :
TTfYReJ7aJEvx4CfwgtY3UV8hJHXTrTwnn
BNB / USDT (BEP-20) :
0x25CAc03F80C12FFc30D8264e4b90423AFfA2E6Ac
MIT