# TLS و دامنه‌ها

> سرو کردن پنل روی HTTPS با ACME، گواهی خودتان یا یک پروکسی معکوس.

Source: https://joinnasnet.com/fa/guides/nasnet-linux/tls-and-domains/
Last updated: 2026-08-14

---

## مرور کلی

در محیط واقعی باید پنل را روی HTTPS به مرورگر بفرستید، چون کوکی‌های نشست secure
به آن نیاز دارند. سه راه برای رسیدن به آن هست، و برنامه هنگام بالا آمدن یکی را با
ترتیبی ثابت انتخاب می‌کند: **فایل‌های گواهی دستی ← ACME ← HTTP ساده**. این صفحه
دربارهٔ TLS خود پنل است. گواهی‌هایی که inboundهای پروکسی شما به کار می‌برند در صفحهٔ
[گواهی‌ها](/fa/guides/nasnet-linux/certificates/) مدیریت می‌شوند.

## پیش از شروع

- دامنه‌ای که DNS آن از قبل به سرور اشاره می‌کند، اگر ACME می‌خواهید.
- چالش ACME باید بتواند از اینترنت به سرور برسد.
- تصمیم بگیرید که خود پنل TLS را خاتمه می‌دهد یا پشت nginx، Caddy، Traefik یا یک
  CDN می‌نشیند.

## گام‌ها

### گواهی خودکار با ACME

1. دامنه‌تان را به سرور اشاره دهید و مطمئن شوید DNS منتشر شده است.
2. کلیدهای ACME را در `.env` بگذارید:

```dotenv
APP_BASE_URL=https://panel.example.com
ACME_ENABLED=true
ACME_EMAIL=you@example.com
ACME_STAGING=true
ACME_AUTO_RENEW=true
ACME_CACHE_DIR=/app/data/acme
JWT_COOKIE_DOMAIN=example.com
JWT_COOKIE_SECURE=true
```

3. برنامه را دوباره راه بیندازید و مطمئن شوید یک گواهی staging صادر می‌شود. بعد
`ACME_STAGING=false` بگذارید و برای گواهی واقعی دوباره راه بیندازید. اول رفتن به
staging جلوی سوزاندن محدودیت نرخ Let's Encrypt را می‌گیرد، آن هم وقتی که دارید
DNS را عیب‌یابی می‌کنید.
4. گواهی‌های صادرشده در `ACME_CACHE_DIR` نگه داشته می‌شوند، که زیر Docker یک
والیوم پایا است، پس راه‌اندازی دوباره باعث صدور دوباره نمی‌شود.

تنظیم‌های ACME در **`Settings`** ← **`Server`** ← **`HTTPS`** هم قابل ویرایش
هستند و در راه‌اندازی بعدی اعمال می‌شوند، پس می‌توانید ACME را بدون دست زدن به
`.env` روشن یا خاموش کنید.

### آوردن گواهی خودتان

برنامه را به فایل‌های PEM خودتان اشاره دهید. فایل‌های دستی بر ACME مقدم هستند.

```dotenv
TLS_CERT_FILE=/path/to/fullchain.pem
TLS_KEY_FILE=/path/to/privkey.pem
```

### پشت یک پروکسی معکوس

TLS را در پروکسی خاتمه دهید و بگذارید برنامه به‌صورت محلی HTTP ساده حرف بزند، ولی
باز هم `APP_BASE_URL` را روی آدرس عمومی HTTPS بگذارید.

```dotenv
APP_BASE_URL=https://panel.example.com
ACME_ENABLED=false
JWT_COOKIE_SECURE=true
JWT_COOKIE_DOMAIN=example.com
```

پنل برای ترمینال زنده، نمودارها و رویدادها از WebSocket و server-sent events
استفاده می‌کند، پس پروکسی باید هدرهای `Upgrade` و `Connection` را رد کند و مهلت
خواندن بلندی داشته باشد.

```nginx
server {
    listen 443 ssl http2;
    server_name panel.example.com;

    ssl_certificate     /etc/letsencrypt/live/panel.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/panel.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:9761;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade    $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }
}
```

## مرجع

| هدف | چه بگذارید |
| --- | --------- |
| HTTPS خودکار روی یک دامنه | `ACME_ENABLED=true`، `ACME_EMAIL`، `APP_BASE_URL=https://…` |
| گواهی خودتان | `TLS_CERT_FILE`، `TLS_KEY_FILE` |
| پشت یک پروکسی یا CDN | `APP_BASE_URL=https://…`، ACME خاموش، کوکی‌های secure روشن |
| IP خالی، فقط برای آزمایش | `APP_BASE_URL=http://ip:port`، ACME خاموش، `JWT_COOKIE_SECURE=false` |

| متغیر | چه می‌کند | پیش‌فرض |
| ----- | -------- | ------ |
| `ACME_ENABLED` | صدور خودکار را روشن می‌کند. با خاموش بودنش هیچ گواهی صادر نمی‌شود، حتی اگر `APP_BASE_URL` روی HTTPS باشد. | `false` |
| `ACME_EMAIL` | آدرس تماس برای اطلاعیه‌های Let's Encrypt. وقتی ACME روشن است لازم است. | خالی |
| `ACME_STAGING` | تا وقتی دارید آزمایش می‌کنید از دایرکتوری staging استفاده می‌کند. | `false` |
| `ACME_AUTO_RENEW` | گواهی را تمدیدشده نگه می‌دارد. | `true` |
| `ACME_CACHE_DIR` | جایی که گواهی‌های صادرشده نگه داشته می‌شوند. | `/app/data/acme` |
| `TLS_CERT_FILE` | مسیر زنجیرهٔ گواهی شما. بر ACME مقدم است. | مقدار ندارد |
| `TLS_KEY_FILE` | مسیر کلید خصوصی شما. | مقدار ندارد |
| `JWT_COOKIE_SECURE` | کوکی‌های نشست را secure علامت می‌زند. به HTTPS نیاز دارد. | `false` |
| `JWT_COOKIE_DOMAIN` | دامنهٔ کوکی. در حالت IP خالی بماند. | خالی |

## رفع مشکلات

| نشانه | چه کنید |
| ----- | ------- |
| صدور گواهی شکست می‌خورد. | مطمئن شوید دامنه به همین سرور resolve می‌شود و چالش ACME می‌تواند به آن برسد، چون دلیل معمول یک فایروال است یا پروکسی‌ای جلوی پنل که مسیر چالش را رد نمی‌کند. با `ACME_STAGING=true` آزمایش کنید تا شکست‌ها به حساب محدودیت نرخ شما نروند. |

## مرتبط

- [اولین اجرا و ورود مدیر](/fa/guides/nasnet-linux/first-run/)
- [گواهی‌ها](/fa/guides/nasnet-linux/certificates/)
- [تنظیمات](/fa/guides/nasnet-linux/settings/)
