Skip to content

saeedsh78/verver

Repository files navigation

🚀 XHTTP Relay ECO (VrcLIraniCore)

نسخه سبک و بهینه‌شده XHTTP Relay روی Node Runtime ورسل

Version Runtime Profile

داستان این نسخه چیه؟
🟥 نسخه ECO طوری تیون شده که علاوه بر امنیت سفت‌وسخت v1.3، کم‌هزینه‌ترین رفتار ممکن روی Vercel Pro رو داشته باشه؛ یعنی با کنترل هوشمند Timeout، Inflight، Throttle و Logها، مصرف منابع و هزینه نهایی تا جای ممکن پایین نگه داشته میشه.

📣 راستی! خوشحال میشم به کانال تلگرامی من سر بزنید: B3hnamR@. 📌 نکته مهم: لطفاً این راهنما رو تا انتها و با دقت بخونید تا موقع ستاپ کردن هیچ مشکلی براتون پیش نیاد.

🔒 برای ساخت اکانت، مطالعه این آموزش کاملاً ضروری است: Anti-Ban-Tutorial.md

توجه خیلی مهم: این پروژه به‌خودی‌خود هیچ تاثیری در بن شدن اکانت ندارد؛ عامل بن فقط فرآیند ساخت اکانت است و این موضوع 100% تست شده.

توجه خیلی مهم: با ساخت رایگان اکانت پرو ترایال میتونید استفاده کنید ❤️


⚠️ هشدار خیلی مهم رفقا لطفا پروژه رو به هیچ‌وجه Fork نکنید. برای اینکه اکانتتون امن بمونه و شبکه‌تون شناسایی نشه، فقط از روش دستی (Vercel CLI) که پایین‌تر توضیح دادم برای دیپلوی استفاده کنید.


✨ تو نسخه ECO چه خبره؟

  • ⏱️ کنترل تایم‌اوت: 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 پهنای باند رو محدود می‌کنیم. نتیجه‌اش میشه یه سرعت پایدار اما با مصرف خیلی کمتر.


🪟 نصب خودکار و بی‌دردسر روی ویندوز (One-Click)

برای رفقایی که حال و حوصله درگیری با ترمینال و تایپ کردن دستورات رو ندارن، یه اسکریپت خودکار (ویندوزی) آماده کردیم که صفر تا صد کار رو خودش انجام میده! دو تا فایل برای این کار اضافه شده: 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، description
  • vercel.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

۴. تنظیم متغیرها (ENV)

در صفحه اصلی ورسل، روی پروژه‌ای که ساختی کلیک کن تا وارد صفحه‌اش بشی. حالا از نوار سمت راست روی گزینه 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 نیست مگه اینکه واقعاً بخوای رو پروژه‌ت پسورد بذاری).

۵. دیپلوی نهایی (Redeploy)

خبر خوب اینه که دیگه نیازی به ترمینال نیست! همون لحظه که متغیرها رو تو سایت ورسل 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

💸 محاسبه هزینه روی Vercel Pro (نسخه 1.3.5)

این نسخه با هدف «اقتصادی‌ترین حالت پایدار» تیون شده.
دیفالت فعلی پروژه روی این مقادیره:

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 منطقه

مثال حدودی (بر اساس نرخ‌های پایه Pro)

  • Invocations: حدود $0.60 / 1M
  • Fast 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 هم تا حد ممکن بیاد پایین.


🎚️ تنظیمات آماده (Presets)

این اعداد صرفاً پیشنهادن. همونی که به کارت میاد رو کپی کن:

۱. تمرکز روی سرعت (برای تک‌کاربر یا مصرف کم)

MAX_INFLIGHT=16
MAX_UP_BPS=1310720
MAX_DOWN_BPS=1310720

۲. حالت متعادل (بهترین بالانس سرعت و مصرف)

MAX_INFLIGHT=48
MAX_UP_BPS=1572864
MAX_DOWN_BPS=1572864

۳. حالت ECO (تعداد یوزر بالا، سرعت پایین - هدف اصلی این پروژه)

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

برای اینکه ببینی کانفیگی که ست کردی چطور داره کار می‌کنه، توی همون داشبورد ورسل روی پروژه‌ات کلیک کن و برو به تب Logs. بعد از اینکه مقادیر زیر رو ست کردی:

MAX_INFLIGHT=
MAX_UP_BPS=
MAX_DOWN_BPS=

شروع کن به استفاده از کانکشن. اگر تو بخش لاگ‌ها دیدی مدام داره ارور 503 میده، یعنی ترافیک گیر کرده و ظرفیتت پر شده. تو این حالت باید بری دوباره با این سه تا عدد بازی کنی و یکم ببریشون بالاتر تا مشکل حل بشه و به بهترین حالت برای سرورت برسی.


💻 نمونه کانفیگ برای کلاینت (v2ray / xray)

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 همون کاراکتر اسلش / هست).


🛠️ معنی ارورها (Status Codes)

  • 200 : همه‌چی عالیه و وصلی.
  • 403 : پسوردی که تو x-relay-key زدی غلطه.
  • 404 : مسیری که تو کلاینت زدی با PUBLIC_RELAY_PATH هم‌خونی نداره.
  • 405 : متد درخواستی غیرمجازه.
  • 500 : متغیرهای محیطی (ENV) رو درست ست نکردی.
  • 502 : تونل نمی‌تونه به سرور اصلیت (Upstream) وصل بشه.
  • 503 : ترافیک همزمان بالاست و به سقف MAX_INFLIGHT رسیدی. (اگه زیاد دیدیش برو تو بخش Logs با اعداد بازی کن).
  • 504 : سرور اصلیت جواب نمیده (تایم‌اوت).

💖 تشکر ویژه و منبع اصلی (Credits)

باید یادی کنیم از منبع اصلی این حرکت؛ این پروژه در واقع فورک و توسعه‌یافته از ایده‌های ناب و زحمات بچه‌های کانال تلگرامی Avaco Cloud هست. دم تیم آواکو کلاود گرم که این مسیر رو برای وب‌گردی آزاد و توسعه ابزارهای این‌چنینی باز کردن. حتماً به کانالشون سر بزنید و از محتواشون حمایت کنید! 🤝


☕ حمایت از پروژه (Donate)

اگر این پروژه براتون مفید بود و دوست داشتید از ادامه توسعه‌اش حمایت کنید، می‌تونید از آدرس‌های زیر استفاده کنید:

Tron (TRX) / USDT (TRC-20) :

TTfYReJ7aJEvx4CfwgtY3UV8hJHXTrTwnn

BNB / USDT (BEP-20) :

0x25CAc03F80C12FFc30D8264e4b90423AFfA2E6Ac

License

MIT

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors