⚠️ هشدار مهم: دوستان لطفاً این پروژه رو فورک نکنید. دفعهی قبل روی فورک پروژه لو رفتیم. لطفاً فقط استفاده کنید و فورک نکنید.
📢 کانال تلگرام Avaco Cloud — برای آموزشهای بیشتر، آپدیتها، روشهای دور زدن سانسور و کانفیگهای جدید عضو شو:
A minimal relay running on Vercel Edge Functions that forwards XHTTP traffic from your Xray/V2Ray client to your backend Xray server. The goal: use Vercel's global edge network and the *.vercel.app domain as a front to hide the real IP of your origin server.
v1.0 — Edge Runtime: uses Vercel Edge Runtime (V8 isolates) with native streaming support. Lightweight, low cold-start latency.
- این پروژه برای کیه؟
- نحوهی کار (معماری)
- محدودیتها و هشدارها
- پیشنیازها
- مرحله ۱ — خرید VPS
- مرحله ۲ — تنظیم دامنه و DNS
- مرحله ۳ — اتصال SSH به VPS
- مرحله ۴ — نصب Xray
- مرحله ۵ — گرفتن TLS Certificate
- مرحله ۶ — کانفیگ Xray با XHTTP
- مرحله ۷ — Deploy روی Vercel
- مرحله ۸ — کانفیگ کلاینت
- محدودیتهای Vercel
- نکته درباره بهینهسازی هزینه
- عیبیابی
- سوالات متداول
این پروژه فقط زمانی به دردت میخوره که خودت یک سرور Xray با XHTTP داری و میخوای IP اون رو با Vercel استتار کنی.
❌ به دردت نمیخوره اگر:
- فقط یه کانفیگ آماده (vless/vmess) از فروشنده گرفتی
- کانفیگت WebSocket / gRPC / Reality / Trojan / TCP هست
- میخوای بدون VPS فقط با Vercel پروکسی بسازی
- ترافیک سنگین داری (استریم 4K، دانلود حجیم، torrent، چندکاربره) — چون Fast Origin Transfer در Hobby خیلی زود تموم میشه و حساب Pause میشه
✅ به دردت میخوره اگر:
- VPS داری یا میخوای بگیری
- میخوای transport رو XHTTP بذاری
- میخوای IP سرورت پنهان بمونه
- استفادهی شخصی و سبک میکنی (چت، مرور وب، ویدیو تا 1080p، موزیک)
- یا حاضری برای ترافیک سنگین پلن Pro بگیری
┌──────────┐ TLS, SNI=vercel.com ┌──────────────┐ HTTP/2 ┌──────────────┐
│ کلاینت │ ─────────────────────► │ Vercel Edge │ ────────► │ سرور Xray │
│ (v2rayN/ │ XHTTP request │ (relay) │ forward │ XHTTP inbound│
│ Hiddify) │ │ │ │ │
└──────────┘ └──────────────┘ └──────────────┘
- کلاینت با SNI=
vercel.comبه دامنهی Vercel وصل میشه. برای سانسورچی شبیه ترافیک عادی Vercel بهنظر میرسه. - Vercel Serverless Function بدنهی request رو stream میکنه به سرور Xray.
- پاسخ هم به همون صورت stream میشه برمیگرده.
🔴 هشدار مهم — Fast Origin Transfer: در پلن Hobby هر بایت ترافیک دو بار شمرده میشه (یکبار کلاینت↔Vercel و یکبار Vercel↔سرور). اگه سهمیه تموم بشه، Vercel اکانتت رو Pause میکنه، کاربرا دیگه نمیتونن وصل بشن و ۳۰ روز باید صبر کنی یا Pro بخری. جزئیات در بخش محدودیتهای Vercel.
برای جلوگیری از قطع شدن اتصال در وسط ماه:
- 📊 Dashboard → Usage رو هفتگی چک کن (Vercel هنگام ۸۰٪ و ۱۰۰٪ ایمیل میفرسته)
- 🔄 چند پروژه Hobby با چند اکانت Gmail بساز و در کلاینت بهصورت Load Balance / Failover تنظیم کن
- ⏸ ویدیوهای 4K و دانلودهای حجیم رو از پروکسی خارج کن (مستقیم یا از پروکسی دیگه)
- 💳 اگه ترافیک زیاد داری، Pro ($20/ماه) بگیر و با Spend Management سقف هزینه بذار
| مورد | توضیح |
|---|---|
| VPS | یک سرور لینوکس خارج از ایران با IP عمومی (ترجیحاً Ubuntu 22.04 یا 24.04) |
| دامنه | یک دامنه (پولی یا رایگان مثل DuckDNS) که A record اون به IP سرور اشاره کنه |
| اکانت Vercel | رایگان از vercel.com |
| Node.js + npm | روی سیستم محلی برای Vercel CLI (میتونی از داشبورد هم deploy کنی) |
| اکانت GitHub | اختیاری، اگه از روش Dashboard استفاده میکنی |
این راهنما هم برای ویندوز و هم مک/لینوکس نوشته شده. در هر مرحله بسته به OS خودت دستورات معادل رو میبینی.
همهی ابزارهای زیر رایگان هستن:
| ابزار | لینک نصب | کاربرد |
|---|---|---|
| PowerShell | از قبل نصبه (در منوی Start جستجو کن) | اجرای دستورات |
| OpenSSH Client | از قبل در Win10/11 نصبه (راهنما) | اتصال SSH |
| Git for Windows | git-scm.com/download/win | git + Git Bash |
| Node.js LTS | nodejs.org — installer رو دانلود و Next-Next-Finish | برای Vercel CLI |
| PuTTY (اختیاری) | putty.org | جایگزین SSH با GUI |
💡 توصیه: بعد از نصب Git for Windows از Git Bash استفاده کن، چون دستورات یونیکسی (مثل
curl,ssh,cat) داخلش طبیعی کار میکنن. این راهنما رو راحتتر میکنه.
| ابزار | روش نصب |
|---|---|
| Terminal | از قبل نصبه |
| ssh, curl, dig | از قبل نصبن |
| Homebrew (Mac) | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
| Node.js | brew install node (Mac) یا apt install nodejs npm (Linux) |
| Git | brew install git (Mac) یا apt install git (Linux) |
| ارائهدهنده | قیمت ماهانه | لوکیشن پیشنهادی |
|---|---|---|
| Hetzner | ~€4.5 | Frankfurt / Helsinki |
| Contabo | ~$4.5 | EU / US |
| Vultr | $5-6 | EU / US |
| DigitalOcean | $6 | متعدد |
- RAM: ۱ GB
- CPU: ۱ vCPU
- Disk: ۲۰ GB SSD
- Bandwidth: حداقل ۱ TB/ماه
- OS: Ubuntu 22.04 یا 24.04
پس از خرید، IP عمومی و رمز SSH رو از داشبورد بگیر.
- پولی: Namecheap, Porkbun, Cloudflare Registrar
- رایگان: DuckDNS
- وارد dash.cloudflare.com شو
- روی دامنهت کلیک کن → منوی DNS → Records
- Add record:
| فیلد | مقدار |
|---|---|
| Type | A |
| Name | xray (یا هر چیز دلخواه — میشه xray.yourdomain.com) |
| IPv4 address | IP عمومی VPS تو (مثلاً 203.0.113.45) |
| Proxy status | ⚫ DNS only (خاکستری، نه نارنجی) |
| TTL | Auto |
🔴 Proxy status حتماً DNS only باشه. اگه Proxied بذاری، Cloudflare وسط ترافیک قرار میگیره و کار نمیکنه.
🍎 Mac / 🐧 Linux:
dig @8.8.8.8 xray.yourdomain.com +short🪟 Windows (PowerShell):
Resolve-DnsName xray.yourdomain.com -Server 8.8.8.8 -Type Aیا با nslookup:
nslookup xray.yourdomain.com 8.8.8.8🪟 Windows (Git Bash):
nslookup xray.yourdomain.com 8.8.8.8باید IP سرور تو رو برگردونه. ممکنه ۱-۵ دقیقه طول بکشه.
ssh root@YOUR_VPS_IPاولین بار yes بزن. رمز رو وارد کن (هنگام تایپ نشون داده نمیشه — این طبیعیه).
- PuTTY رو باز کن
- Host Name (or IP address):
YOUR_VPS_IP - Port:
22 - Connection type:
SSH - Open بزن
- اولین بار Accept بزن
- login:
root+ Enter، رمز رو وارد کن
💡 پس از این مرحله، تمام دستوراتی که با
#(یاroot@vps:~#) شروع میشن، داخل سرور SSH اجرا میشن — مهم نیست از Mac وصل شدی یا Windows.
cat /etc/os-releaseباید Ubuntu 22.04 یا 24.04 رو ببینی.
apt update && apt upgrade -y
apt install -y curl socat cron ufwbash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ installپس از چند ثانیه:
info: Xray vXX.X.X is installed.
xray version
⚠️ نسخه باید حداقل v1.8.16 باشه (برای XHTTP). نسخههای جدیدتر (مثل ۲۶.x) بهترن.
xray uuidخروجی مثل:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
این UUID رو ذخیره کن — بعداً تو کانفیگ سرور و کلاینت لازمه.
systemctl enable xrayufw allow 22/tcp # SSH
ufw allow 80/tcp # برای صدور cert
ufw allow 443/tcp # برای آینده
ufw allow 2096/tcp # پورت Xray ما
ufw --force enable
ufw status
⚠️ قبل ازufw --force enableمطمئن شو پورت ۲۲ allow شده، وگرنه ارتباط SSH قطع میشه.
از acme.sh + Let's Encrypt استفاده میکنیم (رایگان، خودکار).
curl https://get.acme.sh | sh -s email=your@email.com
source ~/.bashrc~/.acme.sh/acme.sh --set-default-ca --server letsencryptss -tlnp | grep :80اگه چیزی listen میکنه (مثل apache یا nginx)، خاموشش کن:
systemctl stop apache2 2>/dev/null
systemctl disable apache2 2>/dev/null
systemctl stop nginx 2>/dev/null~/.acme.sh/acme.sh --issue -d xray.yourdomain.com --standalone -k ec-256جای
xray.yourdomain.comدامنهی واقعی خودت رو بذار.
خروجی موفق:
Cert success.
Your cert is in: /root/.acme.sh/xray.yourdomain.com_ecc/...
mkdir -p /etc/xray
~/.acme.sh/acme.sh --install-cert -d xray.yourdomain.com --ecc \
--fullchain-file /etc/xray/cert.pem \
--key-file /etc/xray/key.pem \
--reloadcmd "systemctl restart xray"
chown -R nobody:nogroup /etc/xray
chmod 644 /etc/xray/cert.pem
chmod 640 /etc/xray/key.pem
ls -la /etc/xray/باید cert.pem و key.pem رو ببینی.
mkdir -p /var/log/xray
touch /var/log/xray/access.log /var/log/xray/error.log
chown -R nobody:nogroup /var/log/xray
cp /usr/local/etc/xray/config.json /usr/local/etc/xray/config.json.bak 2>/dev/null || true📝 قبل از پیست، این مقادیر رو در ذهن داشته باش:
YOUR-UUID-HERE→ UUID که ازxray uuidگرفتیxray.yourdomain.com→ دامنهی واقعی خودت/yourpath→ یه path دلخواه (مثلاً/myapppath)
cat > /usr/local/etc/xray/config.json << 'EOF'
{
"log": {
"loglevel": "warning",
"access": "/var/log/xray/access.log",
"error": "/var/log/xray/error.log"
},
"inbounds": [
{
"tag": "xhttp-in",
"listen": "0.0.0.0",
"port": 2096,
"protocol": "vless",
"settings": {
"clients": [
{ "id": "YOUR-UUID-HERE", "flow": "" }
],
"decryption": "none"
},
"streamSettings": {
"network": "xhttp",
"security": "tls",
"tlsSettings": {
"alpn": ["h2", "http/1.1"],
"certificates": [
{
"certificateFile": "/etc/xray/cert.pem",
"keyFile": "/etc/xray/key.pem"
}
]
},
"xhttpSettings": {
"path": "/yourpath",
"host": "xray.yourdomain.com",
"mode": "auto"
}
}
}
],
"outbounds": [
{ "protocol": "freedom", "tag": "direct" },
{ "protocol": "blackhole", "tag": "blocked" }
]
}
EOF
⚠️ بعد از پیست، فایل رو باnano /usr/local/etc/xray/config.jsonباز کن و سه مقدارYOUR-UUID-HERE,/yourpath,xray.yourdomain.comرو با مقادیر واقعی جایگزین کن.
xray -test -config /usr/local/etc/xray/config.jsonباید ببینی: Configuration OK.
systemctl restart xray
systemctl status xray --no-pager
ss -tlnp | grep 2096curl -vk https://127.0.0.1:2096/yourpathاگه HTTP/2 404 گرفتی → عالیه! (404 طبیعیه چون UUID نفرستادی، یعنی Xray داره کار میکنه.)
دو روش: CLI (سریعتر) یا Dashboard (با GitHub).
🍎 Mac:
# اگه Homebrew نداری
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install node
sudo npm i -g vercel
vercel --version🐧 Linux (Ubuntu/Debian):
sudo apt update
sudo apt install -y nodejs npm
sudo npm i -g vercel
vercel --version🪟 Windows:
-
نصب Node.js:
- برو nodejs.org
- نسخهی LTS رو دانلود کن (فایل
.msi) - دابلکلیک کن، Next تا Finish
- حتماً تیک Add to PATH فعال باشه
-
نصب Vercel CLI (در PowerShell یا Git Bash):
npm i -g vercel vercel --version
اگه permission error داد، PowerShell رو As Administrator باز کن و دوباره بزن.
در هر سیستمعاملی:
vercel loginبا فلش Continue with Email رو انتخاب کن، ایمیلت رو بزن، روی لینک تأیید کلیک کن.
🔴 خیلی مهم — قبل از Deploy حتماً این تغییرات رو انجام بده و کل README رو کامل بخون تا به مشکل نخوری:
- داخل
package.jsonمقدارهای زیر رو حتماً با یه مقدار دلخواه عوض کن (دقیقاً مثل فایل اصلی نمونه نباشه):
"name": "sni-xhttp"→ مثلا"name": "my-xhttp-relay""description": "Serverless XHTTP relay for Xray/V2Ray on Vercel (Edge Runtime)"→ یه متن دلخواه/الکی- داخل
vercel.jsonمقدار"name": "sni-xhttp"رو هم با یه اسم دلخواه عوض کن.این کار برای اینه که پروژهی تو شبیه نسخههای قبلی/عمومی نباشه.
روش ۱: clone از گیتهاب (پیشنهادی)
git clone https://github.com/YOUR-USERNAME/SNI-XHTTP.git
cd SNI-XHTTPروش ۲: دانلود ZIP
از صفحهی Release آخرین نسخه رو دانلود کن، unzip کن، و وارد پوشه شو:
cd path/to/SNI-XHTTPداخل پوشه باید این فایلها باشن:
api/index.js
vercel.json
package.json
vercel linkسؤالات و جوابهای پیشنهادی:
| سؤال | جواب |
|---|---|
Set up "~/path/to/folder"? |
yes |
Which scope should contain your project? |
اکانت خودت رو انتخاب کن |
Link to existing project? |
no (برای پروژهی جدید) |
What's your project's name? |
اسم دلخواه (مثلاً myrelay) |
In which directory is your code located? |
./ |
Want to modify these settings? |
no |
Do you want to change additional project settings? |
no |
✅ پیغام موفقیت: Linked to ACCOUNT/PROJECT (created .vercel)
vercel env add TARGET_DOMAINسؤالات و جوابها:
| سؤال | جواب |
|---|---|
What's the value of TARGET_DOMAIN? |
https://xray.yourdomain.com:2096 (دامنه و پورت سرور خودت) |
Add TARGET_DOMAIN to which Environments? |
با Space روی Production بزن، بعد Enter |
Make it sensitive? |
no |
✅ پیغام موفقیت: Added Environment Variable TARGET_DOMAIN to Project
vercel --prod✅ خروجی موفق:
Production: https://YOUR-PROJECT.vercel.app
Aliased: https://YOUR-PROJECT-ACCOUNT.vercel.app
URL رو یادداشت کن — ازش در کانفیگ کلاینت استفاده میکنی.
| دستور | کار |
|---|---|
vercel ls |
لیست deploymentهای پروژه |
vercel logs --follow |
دیدن لاگ زنده |
vercel env ls |
لیست environment variables |
vercel env rm TARGET_DOMAIN |
حذف یک env var |
vercel logout |
خروج از اکانت فعلی |
vercel login |
ورود (میتونی چند اکانت داشته باشی) |
- ریپوی این پروژه رو fork یا clone کن و به GitHub خودت push کن.
- در vercel.com/new ریپو رو Import کن.
- در صفحهی تنظیمات، بخش Environment Variables:
TARGET_DOMAIN=https://xray.yourdomain.com:2096
- Deploy بزن.
اگه موقع setup گزینهی Vercel Authentication رو روشن گذاشتی، باید خاموشش کنی وگرنه relay کار نمیکنه:
- داشبورد Vercel → پروژه → Settings → Deployment Protection
- Vercel Authentication رو روی Disabled بذار
- Save
🍎 Mac / 🐧 Linux / 🪟 Git Bash / 🪟 PowerShell (Win 10+):
curl -I https://your-project.vercel.app/yourpath🪟 Windows PowerShell (نسخهی native):
Invoke-WebRequest -Uri "https://your-project.vercel.app/yourpath" -Method Head💡 در ویندوز ۱۰+ خود
curl.exeنصبه و کار میکنه.
| خروجی | معنی |
|---|---|
HTTP/2 404 |
✅ همه چیز درسته |
HTTP/2 401 + HTML login |
Deployment Protection روشنه |
HTTP/2 500 |
env var ست نشده |
HTTP/2 502 |
TARGET_DOMAIN غلطه |
UUID: UUID خودت
Address: vercel.com
Port: 443
SNI: vercel.com
Type: xhttp
Path: /yourpath
Host: your-project.vercel.app
Mode: auto
TLS: on
ALPN: h2
Fingerprint: chrome
vless://YOUR-UUID@vercel.com:443?encryption=none&security=tls&sni=vercel.com&alpn=h2&fp=chrome&type=xhttp&path=%2Fyourpath&host=your-project.vercel.app&mode=auto#Vercel-Relay
توجه:
/در path رو با%2Fencode کن.
| پلتفرم | کلاینت |
|---|---|
| Windows | v2rayN (v6.45+) |
| Android | v2rayNG, Hiddify |
| iOS | V2Box, Streisand |
| macOS | V2Box, Hiddify |
| Linux | Hiddify, xray-core |
- Core: حتماً
Xray-core(نه V2Ray-core، چون XHTTP رو V2Ray ساپورت نمیکنه) - Mux: خاموش (
OFF) - Routing: Bypass LAN/Iran رو روشن کن
- Allow Insecure:
OFF
تو مرورگر برو:
https://ifconfig.me
باید IP سرور VPS تو رو نشون بده، نه IP ایران.
⚠️ این اعداد از مستندات رسمی Vercel در زمان نوشتن این README هستن. ممکنه تغییر کرده باشن — برای آخرین آپدیت vercel.com/pricing و vercel.com/docs/limits رو چک کن.
| محدودیت | Hobby (رایگان) | Pro |
|---|---|---|
| Fast Data Transfer (کلاینت ↔ Vercel) | ۱۰۰ GB / ماه | ۱ TB / ماه |
| Fast Origin Transfer (Vercel ↔ سرور پشتی) | ۱۰ GB / ماه | ~۱۰۰ GB / ماه |
| Edge Requests | ۱M / ماه | ۱۰M / ماه |
| Function Invocations | ۱M / ماه | ۱۰M / ماه |
| Fluid Active CPU | ۴ ساعت / ماه | ۴۰ ساعت / ماه |
| Fluid Provisioned Memory | ۳۶۰ GB-hrs / ماه | بیشتر |
| Max Duration (per invocation) | ۶۰ ثانیه | ۳۰۰ ثانیه |
| پلن | قیمت تقریبی | مناسب برای | رفتار هنگام اتمام سهمیه |
|---|---|---|---|
| Hobby | رایگان | استفاده شخصی سبک | معمولاً اکانت pause میشه و باید صبر کنی تا دوره بعدی |
| Pro | از حدود 20$ بهازای هر عضو در ماه |
استفاده جدیتر / تیمی | روی مصرف اضافه، overage (هزینه اضافه) محاسبه میشه |
| Enterprise | سفارشی | سازمانی / SLA / امنیت پیشرفته | قرارداد و سیاست مصرف اختصاصی |
💡 اگر مصرفت نزدیک سقف Hobby میرسه (بهخصوص
Fast Origin Transfer)، برای پایداری بهتر بهProمهاجرت کن یا چند relay جداگانه داشته باش.
📚 منبع رسمی: Vercel Pricing
برای استفادهی پروکسی/relay این مورد بحرانیتر از Fast Data Transfer هست!
هر بایت ترافیک شما دو بار شمرده میشه:
┌─────────┐ Fast Data ┌────────┐ Fast Origin ┌───────────┐
│ کلاینت │ ─────────────► │ Vercel │ ─────────────► │ Xray سرور │
│ │ Transfer │ Edge │ Transfer │ │
└─────────┘ └────────┘ └───────────┘
(سهمیه ۱ — کلاینت) (سهمیه ۲ — origin)
- ۱ GB دانلود از سمت تو = ۱ GB Fast Data + ۱ GB Fast Origin مصرف میشه
- اگه Fast Origin Transfer به حدش برسه، حساب Hobby ت pause میشه و باید ۳۰ روز صبر کنی یا upgrade کنی
با در نظر گرفتن هر دو Fast Data و Fast Origin:
| استفاده | تقریبی |
|---|---|
| چت / تلگرام / WhatsApp | عملاً نامحدود |
| استریم موزیک (Spotify) | عملاً نامحدود |
| مرور وب عادی | عملاً نامحدود |
| یوتیوب 720p | ~۵۰ ساعت / ماه |
| یوتیوب 1080p | ~۲۰-۳۰ ساعت / ماه |
| یوتیوب 4K / دانلود حجیم | ~۷ ساعت / ماه |
💡 برای استفادهی روزمره (چت، مرور، موزیک، ویدیو 720p) Hobby کاملاً کافیه. برای استریم 4K یا دانلود سنگین، یا Pro بگیر یا چند پروژهی Hobby بساز و بینشون load balance کن.
⚠️ این بهینهسازی فقط در نسخهی v1.1 وجود داره — در v1.0 اعمال نشده.در v1.1 runtime به Node.js Serverless تغییر کرده + Fluid Compute concurrency فعال شده، که هزینهی Provisioned Memory رو حدود ۸ برابر کاهش میده. اگه میخوای از این بهینهسازی استفاده کنی، نسخهی v1.1 رو دانلود و deploy کن.
در v1.0 (Edge Runtime)، هر connection همزمان یک instance جدا با حدود ~1GB RAM رزروشده ایجاد میکنه.
برای کاهش بیشتر تعداد instanceها، میتونی تو کانفیگ Xray کلاینت (Custom Config) تعداد connectionهای همزمان رو محدود کنی:
"xhttpSettings": {
"path": "/yourpath",
"host": "your-project.vercel.app",
"mode": "auto",
"xmux": {
"maxConnections": 2,
"maxConcurrency": 16,
"cMaxReuseTimes": 64
}
}maxConnections: 2→ حداکثر ۲ اتصال HTTP همزمان به VercelmaxConcurrency: 16→ هر اتصال تا ۱۶ stream رو multiplex میکنه
⚠️ در v2rayNG و Hiddify معمولاً XMUX از GUI قابل تنظیم نیست — باید Custom Config استفاده کنی.
| آیتم | نرخ | v1.0 |
|---|---|---|
| Fluid Provisioned Memory | $0.012/GB-hr | ~$6.75 |
| Fluid Active CPU | $0.14/hr | ~$1.50 |
| Function Invocations | $0.60/1M | ~$0.60 |
| Fast Origin Transfer | $0.06/GB | ~$0.57 |
| جمع | ~$10.46 |
💡 برای دیدن هزینهی v1.1 (~۷۰٪ ارزانتر)، به README نسخهی v1.1 مراجعه کن.
curl -I https://YOUR-PROJECT.vercel.app/yourpath| خروجی | معنی | راهحل |
|---|---|---|
HTTP/2 404 |
✅ همه چیز درسته (relay آمادهست) | کانفیگ کلاینت رو بساز |
HTTP/2 401 + HTML login |
Deployment Protection روشنه | بخش بعدی |
HTTP/2 500 |
env var ست نشده | بخش 500 |
HTTP/2 502 |
TARGET_DOMAIN غلطه | بخش 502 |
ERR_TIMED_OUT |
شبکه به Vercel نمیرسه | بخش timeout |
شاید:
-
Rewrite rule مشکل داره.
vercel.jsonرو چک کن:"rewrites": [ { "source": "/(.*)", "destination": "/api/index" } ]
⚠️ destinationباید بدون.jsباشه. -
فایل
api/index.jsdeploy نشده. چک کن:vercel ls
و در داشبورد → Deployments → Source ببین فایل آپلود شده.
-
Redeploy کن:
vercel --prod
Vercel به سرور پشتی نمیرسه. چک کن:
TARGET_DOMAINدقیقاً درسته (https://...:port)- Xray در سرور بالاست:
systemctl status xray - پورت در فایروال بازه:
ufw status - از روی VPS تست کن:
curl -I https://xray.yourdomain.com:2096
Env var ست نشده یا redeploy نشده. بزن:
vercel env ls
vercel --prodاگه env var وجود داشت ولی هنوز خطا داد، حذف کن و دوباره اضافه کن:
vercel env rm TARGET_DOMAIN
vercel env add TARGET_DOMAIN
vercel --prodVercel Authentication روشنه. در داشبورد → پروژه → Settings → Deployment Protection → Vercel Authentication رو Disabled کن → Save.
اگه گزینه رو ندیدی، مستقیم برو:
https://vercel.com/ACCOUNT/PROJECT/settings/deployment-protection
شبکهی محلی به Vercel نمیرسه. تست کن:
nslookup YOUR-PROJECT.vercel.appاگه DNS جواب میده ولی صفحه باز نمیشه:
- با VPN امتحان کن — اگه با VPN کار کرد، ISP محلی فیلتر کرده.
- با دیتای موبایل امتحان کن — اگه فقط رو Wi-Fi مشکل داره، router یا ISP اون شبکه فیلتر کرده.
- یه Custom Domain به Vercel وصل کن (Settings → Domains) و در کلاینت همون رو استفاده کن.
این یه warning هست، نه خطا. اکانتت روی Active CPU billing هست — Vercel خودش memory رو مدیریت میکنه و تنظیم memory: 128 در vercel.json نادیده گرفته میشه.
این warning بیضرر هست. میتونی:
- نادیده بگیری — کار میکنه
- یا تنظیم
memoryرو ازvercel.jsonحذف کنی تا warning نیاد
این warning میگه import syntax داری ولی package.json "type": "module" نداره. اضافه کن:
{
"type": "module",
...
}- Mux رو خاموش کن
- Core رو روی
Xray-coreبذار - Routing → Bypass Iran رو فعال کن
- Path در کلاینت دقیقاً برابر path در سرور Xray باشه
- SNI رو از
vercel.comبهYOUR-PROJECT.vercel.appعوض کن - ALPN رو فقط
h2بذار - Fingerprint رو
chromeبذار
ISP موبایل ممکنه *.vercel.app رو bottleneck کنه. یه Custom Domain به Vercel وصل کن (Settings → Domains).
لاگ خطا رو ببین:
tail -50 /var/log/xray/error.logمعمولاً مشکل دسترسی فایل cert/key. با این درست کن:
chown -R nobody:nogroup /etc/xray /var/log/xrayvercel logs --followبعد از باز شدن، یه request از کلاینت بزن — هر خطا یا output در لاگ ظاهر میشه.
بله، ولی با کد متفاوت (Cloudflare Workers). برای WebSocket، Cloudflare Workers بهتره. برای XHTTP، Vercel بهخاطر streaming WebStreams پایدارتره.
یه دامنهی شخصی به Vercel وصل کن (Settings → Domains → Add). بعد در کلاینت host و address رو همون بذار.
محدودیت سختی نیست، ولی برای هر کاربر یه UUID جدا بساز:
"clients": [
{ "id": "uuid-1", "email": "user1@example.com" },
{ "id": "uuid-2", "email": "user2@example.com" }
]بله. پورت دلخواه رو در config.json بذار، در ufw allow کن، و در TARGET_DOMAIN در Vercel همون پورت رو بذار.
vercel logs --followیا در داشبورد → پروژه → Logs.
xray -test -config /usr/local/etc/xray/config.json
systemctl restart xrayبله. acme.sh یه cron job میسازه و هر ۶۰ روز خودکار renew میکنه. میتونی manual تست کنی:
~/.acme.sh/acme.sh --renew -d xray.yourdomain.com --force --eccMIT — مثل پروژهی اصلی.
این پروژه برای آموزش و تست شخصیه. مسئولیت استفاده با خودته. قوانین کشور و TOS Vercel رو رعایت کن.
اگه این راهنما برات مفید بود، یا سوال/پیشنهاد داری، از طریق کانال تلگرام در ارتباط باش:
⭐ اگه پروژه به دردت خورد، یه Star بذار تا بیشتر دیده بشه.