3x-ui3x-ui test
پیکربندی

Subscription

راه‌اندازی سرور اشتراک 3x-ui — قالب‌های base64/JSON/Clash، پورت‌ها و مسیرها، TLS، هدرهای پاسخ و قالب‌های سفارشی.

یک اشتراک (subscription) یک URL واحد است که همه‌ی پیکربندی‌های یک کلاینت را برمی‌گرداند. برنامه‌های کلاینت آن را به‌صورت دوره‌ای تازه‌سازی می‌کنند، بنابراین وقتی یک ورودی را تغییر می‌دهید، کلاینت‌ها این تغییر را به‌صورت خودکار دریافت می‌کنند. سرور اشتراک به‌عنوان یک سرور جداگانه از پنل اجرا می‌شود.

فعال‌سازی و پیکربندی

سرور اشتراک به‌صورت پیش‌فرض روشن است (subEnable). آن را در تنظیمات اشتراک پنل پیکربندی کنید:

SettingDefaultMeaning
subPort2096پورت گوش‌دادن (جدا از پنل).
subListen(همه)آدرس اتصال (bind).
subPath/sub/مسیر پایه برای URLهای خام اشتراک.
subDomain(هیچ)میزبان عمومی؛ اگر تنظیم شود، سرور فقط به همان Host پاسخ می‌دهد.
subCertFile / subKeyFile(هیچ)گواهی و کلید TLS — هنگام تنظیم، سرور HTTPS ارائه می‌دهد.
subEncrypttrueبدنه‌ی خام اشتراک را با base64 رمزگذاری می‌کند.
subUpdates12بازه‌ی پیشنهادی تازه‌سازی (ساعت) که به کلاینت‌ها ارسال می‌شود.

یک URL اشتراک به این شکل است:

https://<sub-host>:<sub-port>/sub/<sub-id>

که در آن <sub-id> همان Sub ID کلاینت است.

همان Sub ID در چند قالب روی مسیرهای مختلف ارائه می‌شود — فهرست Base64 در subPath و پیکربندی JSON (Xray-json) در مسیر JSON. URLها را بسازید و هر دو بدنه را اینجا پیش‌نمایش کنید:

Subscription & sub-JSON builder

Build the subscription URLs and preview both body formats — the Base64 link list and the JSON (Xray-json) config.

Base64 subscription URL
https://sub.example.com:2096/sub/user-1
JSON subscription URL
https://sub.example.com:2096/json/user-1

Clients in this subscription

Subscription links (decoded body)
vless://11111111-2222-3333-4444-555555555555@a.example.com:443?type=tcp&security=reality&sni=www.microsoft.com#HK-01
Base64 body
dmxlc3M6Ly8xMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTVAYS5leGFtcGxlLmNvbTo0NDM/dHlwZT10Y3Amc2VjdXJpdHk9cmVhbGl0eSZzbmk9d3d3Lm1pY3Jvc29mdC5jb20jSEstMDE=
JSON subscription (preview)
{
  "remarks": "HK-01",
  "dns": {
    "tag": "dns_out",
    "queryStrategy": "UseIP",
    "servers": [
      {
        "address": "8.8.8.8",
        "skipFallback": false
      }
    ]
  },
  "inbounds": [
    {
      "port": 10808,
      "protocol": "mixed",
      "settings": {
        "auth": "noauth",
        "udp": true,
        "userLevel": 8
      },
      "sniffing": {
        "destOverride": [
          "http",
          "tls",
          "quic",
          "fakedns"
        ],
        "enabled": true
      },
      "tag": "mixed"
    },
    {
      "port": 10809,
      "protocol": "http",
      "settings": {
        "userLevel": 8
      },
      "tag": "http"
    }
  ],
  "log": {
    "loglevel": "warning"
  },
  "policy": {
    "levels": {
      "8": {
        "connIdle": 300,
        "downlinkOnly": 1,
        "handshake": 4,
        "uplinkOnly": 1
      }
    },
    "system": {
      "statsOutboundUplink": true,
      "statsOutboundDownlink": true
    }
  },
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  },
  "stats": {},
  "outbounds": [
    {
      "protocol": "vless",
      "tag": "proxy",
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "tcpSettings": {
          "header": {
            "type": "none"
          }
        },
        "realitySettings": {
          "fingerprint": "chrome",
          "serverName": "www.microsoft.com"
        }
      },
      "settings": {
        "address": "a.example.com",
        "port": 443,
        "id": "11111111-2222-3333-4444-555555555555",
        "encryption": "none",
        "level": 8
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {
        "domainStrategy": "AsIs",
        "redirect": "",
        "noises": []
      }
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {
        "response": {
          "type": "http"
        }
      }
    }
  ]
}

قالب‌های خروجی

قالب بر اساس مسیر انتخاب می‌شود و هرکدام کلید فعال‌سازی مخصوص خود را دارند:

FormatPathEnabled byOutput
لینک‌های خام/sub/همیشه (اگر روشن باشد)فهرستی از لینک‌های vless://، vmess://، … (هنگام فعال‌بودن subEncrypt با base64 رمزگذاری می‌شود).
JSON/json/subJsonEnableپیکربندی(های) کامل کلاینت Xray.
Clash / Mihomo/clash/subClashEnableپروفایل YAML.

فقط ورودی‌های فعالی که از VLESS، VMess، Trojan، Shadowsocks یا Hysteria2 استفاده می‌کنند در یک اشتراک ظاهر می‌شوند و بر اساس شاخص sub-sort آن‌ها مرتب می‌شوند. درخواست /sub/ همراه با هدر Accept: text/html (یا ?html=1) به‌جای بدنه‌ی خام، یک صفحه‌ی اطلاعات خوانا برای انسان برمی‌گرداند.

Base64 vs JSON

بدنه‌ی Base64 صرفاً همان لینک‌های اشتراک‌گذاری است که با خط جدید به هم پیوسته و با standard-base64 رمزگذاری شده‌اند (با subEncrypt قابل تغییر است). بدنه‌ی JSON هر کلاینت را در یک پیکربندی کامل کلاینت Xray می‌پیچد — یک اسکلت ثابت (ورودی‌های محلی mixed/HTTP، DNS، مسیریابی، policy) به‌علاوه‌ی یک outbound از نوع proxy که به ورودی اشاره می‌کند. 3x-ui برای یک کلاینت یک شیء پیکربندی واحد و برای چند کلاینت یک آرایه تولید می‌کند، از فرم تخت settings در outbound استفاده می‌کند (address/port/id، level: 8) و sockopt را از streamSettings حذف می‌کند.

هدرهای پاسخ

اشتراک‌ها هدرهای استانداردی برمی‌گردانند که برنامه‌های سازگار آن‌ها را می‌خوانند:

  • Subscription-Userinfoupload، download، total (بایت؛ total=0 یعنی نامحدود) و expire (ثانیه‌های Unix).
  • Profile-Update-Interval — بازه‌ی تازه‌سازی برحسب ساعت (subUpdates).
  • Profile-Title، Support-Url، Profile-Web-Page-Url، Announce — برندینگ اختیاری که برخی کلاینت‌ها نمایش می‌دهند.

قالب‌های سفارشی صفحه

برای برندینگ صفحه‌ی HTML اشتراک، subThemeDir را به یک پوشه‌ی حاوی قالب سفارشیِ صفحه‌ی اطلاعات اشاره دهید. توضیح (remark) هر کلاینت روی هر لینک کاملاً قابل قالب‌بندی است — به لینک‌های اشتراک‌گذاری ← متغیرهای remark مراجعه کنید.

سرور اشتراک را پشت TLS قرار دهید (با تنظیم subCertFile/subKeyFile، یا یک پروکسی معکوس) تا محتوای اشتراک در حین انتقال افشا نشود.

On this page