راهنمای تفکیک ترافیک چند دامنه روی پورت ۴۴۳ با Nginx Stream SNI
آموزش پیکربندی ماژول Stream در Nginx برای هدایت هوشمند ترافیک TLS به سرویسهای مختلف داخلی بدون نیاز به باز کردن پورتهای متعدد.
هنگامی که چندین سرویس مستقل (مانند وبسایت اصلی، API، پنل مدیریت و ورکرها) روی یک سرور یا زیرساخت قرار دارند، استفاده از قابلیت SNI Preread به شما امکان میدهد ترافیک لایه TCP را بر اساس نام دامنه (SNI) مستقیماً به پورتها یا کانتینرهای مختلف هدایت کنید.
مفهوم SNI Preread در لایه انتقال (Layer 4)
در این معماری، Nginx ابتدا در لایه Stream اطلاعات سرآیند TLS ClientHello را خوانده و بدون اینکه نیاز به بازگشایی یا دستکاری گواهینامه در ورودی اصلی باشد، ترافیک را به سرویس مقصد ارسال میکند.
نکات کلیدی
- امکان میزبانی چندین سرویس مستقل روی پورت استاندارد ۴۴۳.
- تفکیک تمیز ترافیک میکروسرویسها بدون درگیر کردن کدهای اپلیکیشن.
- حفظ آیپی واقعی کلاینت با فعالسازی پروتکل Proxy Protocol.
نمونه کانفیگ عمومی Nginx Stream SNI
در قطعه کد زیر نمونهای از پیکربندی استاندارد Nginx برای تفکیک دامنههای نمونه به پورتهای لوکال آورده شده است:
stream {
map $ssl_preread_server_name $backend_pool {
app.example.com 127.0.0.1:8001;
api.example.com 127.0.0.1:8002;
panel.example.com 127.0.0.1:8003;
default 127.0.0.1:8001;
}
server {
listen 443;
proxy_pass $backend_pool;
ssl_preread on;
proxy_protocol on;
}
}جمعبندی
معماری SNI Splitter به سادهسازی مدیریت فایروال سرورها کمک کرده و اجازه میدهد سرویسهای ایزوله روی پورت استاندارد وب فعالیت کنند.