subscription.mdx 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. ---
  2. title: Subscription
  3. description: راه‌اندازی سرور اشتراک 3x-ui — قالب‌های base64/JSON/Clash، پورت‌ها و مسیرها، TLS، هدرهای پاسخ و قالب‌های سفارشی.
  4. icon: Rss
  5. ---
  6. یک **اشتراک** (subscription) یک URL واحد است که همه‌ی پیکربندی‌های یک کلاینت را
  7. برمی‌گرداند. برنامه‌های کلاینت آن را به‌صورت دوره‌ای تازه‌سازی می‌کنند، بنابراین وقتی
  8. یک ورودی را تغییر می‌دهید، کلاینت‌ها این تغییر را به‌صورت خودکار دریافت می‌کنند. سرور
  9. اشتراک به‌عنوان یک سرور **جداگانه** از پنل اجرا می‌شود.
  10. ## فعال‌سازی و پیکربندی
  11. سرور اشتراک به‌صورت **پیش‌فرض روشن** است (`subEnable`). آن را در تنظیمات اشتراک
  12. پنل پیکربندی کنید:
  13. | Setting | Default | Meaning |
  14. | ------------- | ------- | --------------------------------------------------------------- |
  15. | `subPort` | `2096` | پورت گوش‌دادن (جدا از پنل). |
  16. | `subListen` | _(همه)_ | آدرس اتصال (bind). |
  17. | `subPath` | _(تصادفی برای هر پنل)_ | مسیر پایه برای URLهای خام اشتراک. |
  18. | `subDomain` | _(هیچ)_ | میزبان عمومی؛ اگر تنظیم شود، سرور فقط به همان Host پاسخ می‌دهد. |
  19. | `subCertFile` / `subKeyFile` | _(هیچ)_ | گواهی و کلید TLS — هنگام تنظیم، سرور **HTTPS** ارائه می‌دهد. |
  20. | `subEncrypt` | `true` | بدنه‌ی خام اشتراک را با base64 رمزگذاری می‌کند. |
  21. | `subUpdates` | `12` | بازه‌ی پیشنهادی تازه‌سازی (ساعت) که به کلاینت‌ها ارسال می‌شود. |
  22. یک URL اشتراک به این شکل است:
  23. ```text
  24. https://<sub-host>:<sub-port>/<sub-path>/<sub-id>
  25. ```
  26. که در آن `<sub-id>` همان **Sub ID** کلاینت است.
  27. همان Sub ID در چند قالب روی مسیرهای مختلف ارائه می‌شود — فهرست **Base64** در
  28. `subPath` و پیکربندی **JSON** (Xray-json) در مسیر JSON. URLها را بسازید و هر دو
  29. بدنه را اینجا پیش‌نمایش کنید:
  30. <SubscriptionBuilder />
  31. ## قالب‌های خروجی
  32. **قالب بر اساس مسیر انتخاب می‌شود** و هرکدام کلید فعال‌سازی مخصوص خود را دارند:
  33. | Format | Path | Enabled by | Output |
  34. | --------------------- | --------- | ---------------- | --------------------------------------------------- |
  35. | **لینک‌های خام** | `subPath` | همیشه (اگر روشن باشد) | فهرستی از لینک‌های `vless://`، `vmess://`، … (هنگام فعال‌بودن `subEncrypt` با base64 رمزگذاری می‌شود). |
  36. | **JSON** | `subJsonPath` | `subJsonEnable` | پیکربندی(های) کامل کلاینت Xray. |
  37. | **Clash / Mihomo** | `subClashPath` | `subClashEnable` | پروفایل YAML. |
  38. فقط ورودی‌های فعالی که از **VLESS، VMess، Trojan، Shadowsocks، WireGuard، AmneziaWG، MTProto، TUIC یا Hysteria2**
  39. استفاده می‌کنند در یک اشتراک ظاهر می‌شوند و بر اساس شاخص sub-sort آن‌ها مرتب می‌شوند (TUIC و AmneziaWG در لینک‌های خام و پروفایل‌های Clash/Mihomo گنجانده می‌شوند اما از اندپوینت‌های JSON حذف می‌شوند؛ MTProto در لینک‌های خام گنجانده می‌شود). درخواست `subPath` همراه با هدر `Accept: text/html` (یا `?html=1`) به‌جای بدنه‌ی خام،
  40. یک صفحه‌ی اطلاعات خوانا برای انسان برمی‌گرداند.
  41. ### Base64 vs JSON
  42. بدنه‌ی **Base64** صرفاً همان لینک‌های اشتراک‌گذاری است که با خط جدید به هم پیوسته و
  43. با standard-base64 رمزگذاری شده‌اند (با `subEncrypt` قابل تغییر است). بدنه‌ی **JSON**
  44. هر کلاینت را در یک پیکربندی کامل کلاینت Xray می‌پیچد — یک اسکلت ثابت (ورودی‌های محلی
  45. SOCKS/HTTP روی 127.0.0.1، DNS، مسیریابی، policy) به‌علاوه‌ی یک outbound از نوع `proxy` که به ورودی
  46. اشاره می‌کند. 3x-ui **برای یک کلاینت یک شیء پیکربندی واحد و برای چند کلاینت یک آرایه**
  47. تولید می‌کند، از فرم تخت `settings` در outbound استفاده می‌کند
  48. (`address`/`port`/`id`، `level: 8`) و `sockopt` را از `streamSettings` حذف می‌کند.
  49. ## هدرهای پاسخ
  50. اشتراک‌ها هدرهای استانداردی برمی‌گردانند که برنامه‌های سازگار آن‌ها را می‌خوانند:
  51. - **`Subscription-Userinfo`** — `upload`، `download`، `total` (بایت؛ `total=0`
  52. یعنی نامحدود) و `expire` (ثانیه‌های Unix).
  53. - **`Profile-Update-Interval`** — بازه‌ی تازه‌سازی برحسب ساعت (`subUpdates`).
  54. - **`Profile-Title`**، **`Support-Url`**، **`Profile-Web-Page-Url`**،
  55. **`Announce`** — برندینگ اختیاری که برخی کلاینت‌ها نمایش می‌دهند.
  56. ### لینک صفحه پروفایل
  57. در تنظیمات **سابسکریپشن ← پروفایل**، گزینه **صفحه پروفایل** (`subProfileMode`)
  58. لینک را برای همه کلاینت‌های اشتراک کنترل می‌کند:
  59. - **بدون لینک** (`none`، پیش‌فرض) — هدر `Profile-Web-Page-Url` ارسال نمی‌شود.
  60. - **صفحه اشتراک داخلی** (`builtin`) — لینک صفحه اشتراک داخلی ارائه می‌شود.
  61. - **وب‌سایت سفارشی** (`custom`) — آدرس `subProfileUrl` استفاده می‌شود؛ اگر خالی باشد، هدر ارسال نمی‌شود.
  62. **پس از ارتقا:** اگر `subProfileMode` هنوز تنظیم نشده و مقدار قبلی `subProfileUrl`
  63. خالی یا فقط شامل فاصله باشد، به‌جای لینک خودکار صفحه داخلی، حالت **بدون لینک**
  64. انتخاب می‌شود. آدرس سفارشی غیرخالی قبلی در حالت **وب‌سایت سفارشی** حفظ می‌شود.
  65. برای بازگرداندن لینک قبلی، در همین بخش **صفحه اشتراک داخلی** را انتخاب و تنظیمات
  66. را ذخیره کنید. این صفحه آدرس‌های اشتراک و پیکربندی گره‌ها را آشکار می‌کند، حتی
  67. برای اشتراک‌های رمزگذاری‌شده Happ.
  68. ## قالب‌های سفارشی صفحه
  69. برای برندینگ صفحه‌ی HTML اشتراک، `subThemeDir` را به یک پوشه‌ی حاوی قالب سفارشیِ
  70. صفحه‌ی اطلاعات اشاره دهید. توضیح (remark) هر کلاینت روی هر لینک کاملاً قابل
  71. قالب‌بندی است — به [لینک‌های اشتراک‌گذاری ← متغیرهای remark](/docs/config/share-links#remark-template-variables) مراجعه کنید.
  72. <Callout type="info">
  73. سرور اشتراک را پشت TLS قرار دهید (با تنظیم `subCertFile`/`subKeyFile`، یا یک
  74. [پروکسی معکوس](/docs/operations/reverse-proxy)) تا محتوای اشتراک در حین انتقال
  75. افشا نشود.
  76. </Callout>