Skip to content

avacocloud/netlify-XHHTP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

⚠️ هشدار

فورک کردن این پروژه (به‌خصوص اگر تعداد زیادی کاربر دقیقاً همین کار را انجام دهند) ممکن است ریسک محدودسازی/بن شدن اکانت‌ها را بالا ببرد. اگر می‌خواهید ریسک کمتر باشد، پیشنهاد می‌شود از گزینه B (Netlify CLI بدون فورک) استفاده کنید.


English🌎 | فارسی🇮🇷 | Telegram

Netlify‑XHTTP

یک پروکسی سبک و جریان‌محور (streaming) برای ترافیک VLESS + XHTTP با استفاده از Netlify Edge Functions.

فورک کنید، به گیت‌هاب متصل شوید، یک متغیر محیطی تنظیم کنید و در ۶۰ ثانیه راه‌اندازی شوید – محدودیت‌های پلن رایگان Netlify به‌صورت Credit-based است و ممکن است تغییر کند (جزئیات: https://www.netlify.com/pricing/).

این پروژه با الهام از Vercel‑XHTTP ساخته شده و جایگزینی تقریباً بدون تغییر برای نسخه‌ی Vercel ارائه می‌دهد. تمام درخواست‌های ورودی – از جمله WebSocket و داده‌های جریانی – را به سرور شخصی Xray شما ارسال می‌کند، دقیقاً مانند نسخه‌ی اصلی، اما روی شبکه‌ی جهانی Netlify.


✨ چرا Netlify‑XHTTP؟

ویژگی Vercel‑XHTTP (اصلی) Netlify‑XHTTP (این پروژه)
پهنای باند ۱۰ گیگابایت در ماه Credit-based (طبق صفحه قیمت‌گذاری Netlify)
جریان (Streaming) داخلی (Node.js streams) بومی (Edge Function ReadableStream)
زمان انقضا ۱۰ ثانیه (طرح Hobby) ۳۰ ثانیه (همه‌ی طرح‌ها)
استقرار داشبورد Vercel داشبورد Netlify + فورک گیت‌هاب
WebSocket پشتیبانی از طریق جریان پشتیبانی از طریق جریان
دامنه شخصی بله بله (SSL رایگان)

🚀 نحوه‌ی کار

۱. شما این پروژه را به عنوان Edge Function روی Netlify مستقر می‌کنید. ۲. تابع روی تمام مسیرهای دامنه‌ی Netlify شما (/*) گوش می‌دهد. ۳. هر درخواست HTTP/HTTPS ورودی بدون تغییر به سرور بک‌اند Xray شما (که VLESS + XHTTP را اجرا می‌کند) ارسال می‌شود. ۴. پاسخ به صورت زنده و جریانی به کلاینت بازگردانده می‌شود – بدون بافر، بدون قطع ارتباط زنده.

کلاینت (برنامه‌ی شما)  →  Netlify Edge  →  بک‌اند شما (Xray + VLESS + XHTTP)

📦 پیش‌نیازها

  • یک سرور Xray فعال با ورودی VLESS + XHTTP
    (مثلاً در حال گوش‌دادن روی https://your-backend-server.com:443)
  • یک حساب Netlify
  • یک حساب گیت‌هاب

⚠️ نکته مهم (حتماً شخصی‌سازی کنید)

برای اینکه کانفیگ‌ها شبیه هم نشوند و ریسک شناسایی/مسدود شدن کمتر شود، حتماً مقادیر پیش‌فرض و اطلاعات حساس را تغییر دهید. حداقل این موارد را برای هر نفر/هر سرور یکتا کنید:

  • UUID/ID کاربر در VLESS
  • Path مربوط به XHTTP (مثلاً به جای مسیرهای ساده، یک مسیر غیرقابل حدس بگذارید)
  • Domain/Host (ترجیحاً دامنه‌ی شخصی)
  • در صورت استفاده از تنظیمات اضافی مثل SNI/ALPN، آن‌ها را با توجه به سرور خودتان تنظیم کنید

اگر از کانفیگ‌های آماده/کپی‌شده استفاده کنید و همه دقیقاً یکسان باشند، احتمال مشکل (از جمله محدودسازی/بن شدن) بیشتر می‌شود.


📖 آموزش کامل (استقرار در ۲ دقیقه)

گزینه A: استقرار از داشبورد Netlify (فورک)

۱. این مخزن را فورک کنید

روی دکمه‌ی Fork در بالای همین صفحه کلیک کنید تا یک کپی در حساب گیت‌هاب خودتان ایجاد شود.

۲. Netlify را به فورک خود متصل کنید

  • وارد Netlify شوید و روی “Add new site” → “Import an existing project” کلیک کنید.
  • GitHub را انتخاب کنید، در صورت نیاز مجوز دهید و مخزن فورک‌شده‌ی خود را برگزینید.
  • Netlify به‌طور خودکار تنظیمات را از فایل netlify.toml تشخیص می‌دهد – نیازی به تغییر دستور build یا پوشه‌ی publish نیست.

۳. متغیر محیطی را تنظیم کنید

  • در داشبورد Netlify، به Site settings → Environment variables بروید.
  • یک متغیر جدید اضافه کنید:
    • Key: BACKEND_URL
    • Value: آدرس کامل بک‌اند Xray، مثلاً https://my-vps.com (اسلش / در انتها قرار ندهید)
  • متغیر را ذخیره کنید.

۴. استقرار

  • به تب Deploys برگردید و روی “Trigger deploy” کلیک کنید (اگر قبلاً مستقر نشده است).
  • پس از چند ثانیه، وب‌سایت شما روی دامنه‌ای تصادفی به فرم something.netlify.app در دسترس خواهد بود.

۵. از آن به عنوان پروکسی استفاده کنید

کلاینت XHTTP خود (مانند v2rayN، Nekoray یا برنامه‌های سفارشی) را باز کرده و تنظیم کنید:

  • آدرس (host): دامنه‌ی Netlify شما (https://your-site.netlify.app)
  • پورت: 443
  • مسیر: هر چیزی که بک‌اند شما انتظار دارد (مثلاً /your-xhttp-path)

تمام! اکنون ترافیک شما از لبه‌ی شبکه‌ی جهانی Netlify به بک‌اند شما جریان می‌یابد، درست مانند نسخه‌ی Vercel.

💡 دامنه‌ی شخصی؟
در Netlify، به Domain settings بروید و دامنه‌ی شخصی خود را اضافه کنید. سپس کلاینت را با آن دامنه به‌روز کنید.


گزینه B: استقرار با Netlify CLI (بدون فورک)

اگر نمی‌خواهید فورک کنید یا گیت‌هاب را به Netlify وصل کنید، می‌توانید مستقیم از روی سیستم خودتان دیپلوی کنید.

۱. نصب Netlify CLI

npm i -g netlify-cli

۲. لاگین

netlify login

۳. کلون کردن پروژه

git clone https://github.com/avacocloud/netlify-XHHTP.git
mv netlify-XHHTP xxx-xxx-xxxxx
cd xxx-xxx-xxxxx

نکته:

  • منظور از xxx این است که به‌جای آن هر اسمی دوست دارید بگذارید.
  • بهتر است بعد از کلون، اسم پوشه/پروژه را عوض کنید تا پروژه‌های همه یک نام یکسان نداشته باشند.

۴. ساخت/لینک کردن سایت در Netlify

netlify init

پیشنهاد:

  • گزینه‌ی Create & configure a new site را انتخاب کنید.
  • وقتی درباره‌ی build settings سوال پرسید، تنظیمات داخل netlify.toml را دست‌نزنید (build command لازم نیست).

۵. تنظیم متغیر محیطی

netlify env:set BACKEND_URL "https://my-vps.com:port"

نکته‌ها:

  • مقدار باید یک URL کامل باشد.
  • در انتهای آدرس، اسلش / نگذارید.

۶. دیپلوی روی پروداکشن

netlify deploy --prod

بعد از دیپلوی، آدرسی که CLI نمایش می‌دهد (یا دامنه‌ی شخصی‌تان) را به عنوان Host داخل کلاینت وارد کنید.

🧩 نمونه تنظیمات کلاینت

v2rayN (فیلدهای پایه)

۱. یک پروفایل VLESS بسازید یا ویرایش کنید. ۲. این فیلدها را تنظیم کنید:

  • Address / Server: دامنه‌ی Netlify شما (مثل your-site.netlify.app) یا دامنه‌ی شخصی
  • Port: 443
  • Transport / Network: xhttp
  • Path: مسیر XHTTP روی بک‌اند (باید با ورودی Xray یکی باشد)، مثلاً /your-xhttp-path ۳. TLS را فعال کنید. ۴. ذخیره کنید و اتصال را تست کنید.

Nekoray (فیلدهای پایه)

۱. یک پروفایل VLESS بسازید/ایمپورت کنید. ۲. در تنظیمات انتقال (Transport) گزینه‌ی XHTTP را انتخاب کنید. ۳. این فیلدها را تنظیم کنید:

  • Server / Host: دامنه‌ی Netlify یا دامنه‌ی شخصی
  • Port: 443
  • Path: مثلاً /your-xhttp-path ۴. TLS را فعال کنید و اتصال را برقرار کنید.

تنها فایلی که ممکن است بخواهید مشاهده کنید proxy.js است – یک کنترل‌کننده‌ی ساده ۵۰ خطی که همه چیز را ارسال می‌کند.


🔧 سفارشی‌سازی

تغییر آدرس بک‌اند بدون استقرار مجدد

کافیست متغیر BACKEND_URL را در داشبورد Netlify ویرایش کنید. درخواست بعدی مقدار جدید را فوراً دریافت می‌کند (نیازی به بیلد مجدد نیست).

استفاده از مسیر ثابت در بک‌اند

اگر بک‌اند شما مسیر ثابتی انتظار دارد (مثلاً /my‑secret)، می‌توانید آن را مستقیماً در proxy.js مقداردهی کنید:

// در proxy.js، ساخت URL را این‌گونه تغییر دهید:
const upstreamUrl = new URL('/my-secret' + url.search, BACKEND_URL).toString();

سپس کلاینت می‌تواند از هر مسیری استفاده کند – تابع همیشه به /my-secret روی بک‌اند ارسال می‌کند.


❗ عیب‌یابی

خطای “Page not found” پس از استقرار

این معمولاً به این معنی است که Edge Function شناسایی نشده است.

۱. تب Functions در Netlify را بررسی کنید – باید proxy در بخش Edge Functions فهرست شده باشد. ۲. اگر موجود نیست، لاگ‌های استقرار را ببینید. هر خطای نحوی در proxy.js مانع بارگذاری تابع می‌شود. ۳. مطمئن شوید netlify.toml دقیقاً مانند همین مخزن است (براکت دوتایی برای [[edge_functions]]، نام صحیح تابع). ۴. یک استقرار کاملاً تازه را امتحان کنید: یک سایت جدید در Netlify ایجاد کرده و مخزن را دوباره متصل کنید.

زمان‌های طولانی / قطع شدن درخواست‌ها

  • مطمئن شوید بک‌اند شما از اینترنت قابل دسترسی است (فایروال، پورت صحیح).
  • از BACKEND_URL با گواهی خود-امضا استفاده نکنید – fetch در Netlify به گواهی HTTPS معتبر نیاز دارد (روی بک‌اند خود Let’s Encrypt نصب کنید).
  • Edge Functions محدودیت زمانی ۳۰ ثانیه دارند. جریان‌های طولانی (مانند ویدیو) کار خواهند کرد، اما اتصال باید در این بازه کامل شود. برای اتصالات دائمی WebSocket، کلاینت باید قابلیت اتصال مجدد داشته باشد.

محدودیت‌های پهنای باند

طرح رایگان Netlify الان بر اساس Credit است و محدودیت‌ها ممکن است با گذشت زمان تغییر کنند. برای دیدن محدودیت‌های دقیق پلن رایگان و هزینه/مصرف پهنای باند، صفحه‌ی رسمی قیمت‌گذاری Netlify را بررسی کنید:

اگر پهنای باند بیشتری نیاز دارید، پلن را ارتقا دهید یا مصرف ترافیک را بهینه کنید. برای پهنای باند نامحدود، Cloudflare Workers را در نظر بگیرید – اما نیازمند بازنویسی پروکسی برای محیط Workers خواهد بود.


🔄 تفاوت‌ها با Vercel‑XHTTP

  • محیط اجرا: Edge Functions از API وب مبتنی بر Deno استفاده می‌کنند، نه Node.js. جریان‌دهی کاملاً بومی است.
  • پیکربندی: فایل vercel.json با netlify.toml جایگزین شده. نیازی به rewrites نیست؛ بلوک [[edge_functions]] مسیریابی را انجام می‌دهد.
  • متغیر محیطی: از BACKEND_URL استفاده کنید (ممکن است در نسخه‌ی اصلی نام متغیر متفاوتی به کار رفته باشد).
  • شروع سرد (Cold starts): Edge Functions شروع فوق‌العاده سریعی دارند (< 50ms)، قابل مقایسه با Vercel.

🙏 تقدیر و مجوز

این پروژه با الهام از Vercel‑XHTTP ساخته‌شده توسط avaco-cloud ایجاد شده است.
کد این مخزن تحت مجوز MIT ارائه می‌شود – می‌توانید آزادانه تغییر دهید و توزیع کنید.


تلگرام: https://t.me/avaco_cloud

پراکسی خوبی داشته باشید! اگر با مشکلی مواجه شدید، issue باز کنید یا تماس بگیرید.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors