پراکسی معکوس

نکات مهم

اصطلاحات
دامنهٔ برنامه دامنه‌ای است که نمونهٔ ویترو بلاگ روی آن اجرا می‌شود؛ مانند `blogs.example.com` و با متغیر `DOMAIN_APP` تنظیم می‌شود.

دامنهٔ اختصاصی دامنه‌ای است که به وبلاگی افزوده شده؛ مانند `personal-domain.com`. هر وبلاگ می‌تواند دامنهٔ اختصاصی خودش را داشته باشد.

هنگام اجرای ویترو بلاگ پشت پراکسی معکوس:

  • دامنهٔ برنامه: روش TLS را خودتان تعیین می‌کنید. اگر پراکسی TLS را خاتمه می‌دهد، TLS_MODE=external بگذارید؛ دامنهٔ برنامه روی درگاه :80 گوش می‌دهد و پراکسی درخواست HTTPS را به آن می‌فرستد. اگر می‌خواهید خود ویترو بلاگ TLS را مدیریت کند، از TLS_MODE=auto استفاده کنید و ترافیک TCP درگاه‌های ۸۰ و ۴۴۳ را به آن بفرستید (درگاه ۸۰ برای ACME لازم است). برای گواهی و کلید خودتان TLS_MODE=manual را انتخاب کنید. جزئیات در حالت TLS است.
  • دامنه‌های اختصاصی: TLS همیشه توسط ویترو بلاگ مدیریت می‌شود. ترافیک HTTP درگاه ۸۰ را برای چالش ACME و TCP درگاه ۴۴۳ را بدون خاتمهٔ TLS به ویترو بلاگ بفرستید.
  • IP پراکسی را در متغیر TRUSTED_PROXIES قرار دهید؛ به‌طور پیش‌فرض همهٔ محدوده‌های IP خصوصی مورداعتمادند.

Traefik

برای تنظیم بر اساس TLS، درگاه ۸۰ باید برای چالش ACME به ویترو بلاگ فرستاده شود. در حالت TLS_MODE=auto، TCP درگاه ۴۴۳ را بدون خاتمهٔ TLS عبور دهید. در حالت TLS_MODE=external، TLS دامنهٔ برنامه را در Traefik خاتمه دهید، اما ترافیک TCP دامنه‌های اختصاصی را در ۴۴۳ مستقیم عبور دهید. برای این حالت، تنظیم ACME باید از tlschallenge استفاده کند؛ httpchallenge با چالش دامنه‌های اختصاصی تداخل دارد.

Caddy

درگاه ۸۰، HTTP معمولی است و با reverse_proxy قابل‌ارسال است. برای عبور بی‌تغییر ترافیک TLS درگاه ۴۴۳، Caddy به افزونهٔ layer4 نیاز دارد که با xcaddy ساخته می‌شود:

xcaddy build --with github.com/mholt/caddy-l4

در حالت TLS_MODE=auto دامنهٔ برنامه و دامنه‌های اختصاصی را بدون خاتمهٔ TLS به ویترو بلاگ بفرستید. در حالت external، SNI دامنهٔ برنامه را تشخیص دهید و TLS آن را در Caddy خاتمه دهید؛ بقیهٔ دامنه‌ها باید بدون تغییر به ویترو بلاگ برسند.

NGINX

برای عبور TLS درگاه ۴۴۳ بدون خاتمه، NGINX به ماژول stream با --with-stream و --with-stream_ssl_preread_module نیاز دارد. تصویر رسمی Docker این ماژول‌ها را دارد. درگاه ۸۰ HTTP است و در بخش http عادی به‌صورت پراکسی عبور داده می‌شود.

در TLS_MODE=auto، ویترو بلاگ TLS همهٔ دامنه‌ها را خاتمه می‌دهد و NGINX همهٔ TCP درگاه ۴۴۳ را مستقیم عبور می‌دهد. در TLS_MODE=external، NGINX TLS دامنهٔ برنامه را خاتمه می‌دهد و دامنه‌های اختصاصی را به‌صورت TCP خام عبور می‌دهد؛ گواهی آن‌ها همچنان توسط ویترو بلاگ صادر می‌شود.