نسخه سبک و بهینهشده 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.5رو هم اعمال میکنه: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: ساختن یه پروژه کاملاً جدید.
تغییر ماهیت ریز هر Deploy (Randomization): برای اینکه همه با Fingerprint یکسان دیپلوی نکنن، اسکریپت قبل از Deploy اینها رو موقت رندوم میکنه:
package.json:name،version،descriptionvercel.json:name
بعد از پایان Deploy (حتی اگر Fail بشه)، فایلهای لوکال به حالت اصلی برمیگردن.
💡 نکته: هر جای کار خواستی اسکریپت رو متوقف کنی کافیه
Ctrl + Cرو بزنی.RELAY_PATHباید دقیقاً با Path تنظیمات سرور خارجت یکی باشه.PUBLIC_RELAY_PATHفقط مسیر عمومی روی دامنه Vercel خودته (دیفالت:/api).
لندینگ رندم چطور کار میکنه؟
- تمپلیتها داخل مسیر
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). اگر نذاری، هر بیلد رندم انتخاب میشه.
💡 مهم: تیک گزینه
Sensitiveرو حتماً بردار تا بعداً بتونی مقدار این متغیرها رو تو داشبورد ببینی. در نهایت دکمه Save رو بزن.
مقادیر ENV رو میتونی دقیقاً طبق جدول زیر ست کنی:
| متغیر | وضعیت | مقدار دیفالت v1.3.5 | توضیح |
|---|---|---|---|
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 داره. همون رو بزن تا پروژه با تنظیمات جدیدت دوباره ساخته بشه و آماده کار بشه.
متغیرهای 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.5 لاگها 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