TLS و دامنه‌ها

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

آخرین به‌روزرسانی ۲۳ مرداد ۱۴۰۵نمایش به‌صورت مارک‌داون

مرور کلی

در محیط واقعی باید پنل را روی HTTPS به مرورگر بفرستید، چون کوکی‌های نشست secure به آن نیاز دارند. سه راه برای رسیدن به آن هست، و برنامه هنگام بالا آمدن یکی را با ترتیبی ثابت انتخاب می‌کند: فایل‌های گواهی دستی ← ACME ← HTTP ساده. این صفحه دربارهٔ TLS خود پنل است. گواهی‌هایی که inboundهای پروکسی شما به کار می‌برند در صفحهٔ گواهی‌ها مدیریت می‌شوند.

پیش از شروع

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

گام‌ها

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

  1. دامنه‌تان را به سرور اشاره دهید و مطمئن شوید DNS منتشر شده است.
  2. کلیدهای ACME را در .env بگذارید:
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
  1. برنامه را دوباره راه بیندازید و مطمئن شوید یک گواهی staging صادر می‌شود. بعد ACME_STAGING=false بگذارید و برای گواهی واقعی دوباره راه بیندازید. اول رفتن به staging جلوی سوزاندن محدودیت نرخ Let’s Encrypt را می‌گیرد، آن هم وقتی که دارید DNS را عیب‌یابی می‌کنید.
  2. گواهی‌های صادرشده در ACME_CACHE_DIR نگه داشته می‌شوند، که زیر Docker یک والیوم پایا است، پس راه‌اندازی دوباره باعث صدور دوباره نمی‌شود.

تنظیم‌های ACME در SettingsServerHTTPS هم قابل ویرایش هستند و در راه‌اندازی بعدی اعمال می‌شوند، پس می‌توانید ACME را بدون دست زدن به .env روشن یا خاموش کنید.

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

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

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

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

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

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 را رد کند و مهلت خواندن بلندی داشته باشد.

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 آزمایش کنید تا شکست‌ها به حساب محدودیت نرخ شما نروند.

مرتبط