معرفی
انجیناکس (NGINX) یک وبسرور، پراکسی معکوس (Reverse Proxy) و ابزار توزیع بار (Load Balancing) است که برای سرویسدهی فایلهای استاتیک، مدیریت درخواستهای HTTP و HTTPS و هدایت ترافیک به سرویسهای پشتصحنه استفاده میشود. تیمها معمولاً NGINX را در لبه زیرساخت یا جلوی سرویسهای کاربردی قرار میدهند تا درخواستهای ورودی را پیش از رسیدن به اپلیکیشن مدیریت و مسیریابی کنند.
NGINX Open Source میتواند فایلهای استاتیک مانند تصویر، CSS و JavaScript را مستقیماً سرویسدهی کند، خاتمه TLS (TLS Termination) را انجام دهد و درخواستهای پویا را به یک یا چند سرویس پشتصحنه ارسال کند. برای نمونه، یک اپلیکیشن Python، PHP، Java یا Node.js میتواند روی پورت داخلی اجرا شود و کاربران از طریق NGINX به آن دسترسی پیدا کنند.
NGINX Open Source و NGINX Plus دو محصول با مجموعه قابلیتهای متفاوت هستند. برای نمونه، بررسی سلامت فعال سرویسهای HTTP در NGINX Plus ارائه میشود، در حالی که NGINX Open Source برای تشخیص خرابی مقصد در توزیع بار از بررسیهای غیرفعال مبتنی بر خطاهای ارتباطی استفاده میکند. بنابراین هنگام طراحی معماری باید قابلیت موردنیاز و نسخه مورد استفاده را بررسی کنید.
مهندسان دواپس، مدیران سیستم لینوکس و توسعهدهندگان بکاند هنگام استقرار سرویس، تنظیم دامنه و گواهی TLS، مسیریابی درخواستها، توزیع بار و کنترل دسترسی با NGINX کار میکنند. یادگیری آن فقط به حفظ کردن دستورهای پیکربندی محدود نیست و آشنایی با HTTP، DNS، پورتها، شبکه و رفتار سرویس مقصد نیز برای عیبیابی آن اهمیت دارد.
ویژگیهای کلیدی
موارد زیر تصویری کلی از این بخش برای این ابزار ارائه میکنند.
-
پراکسی معکوس برای سرویسهای بکاند
درخواستهای ورودی را دریافت میکند و بر اساس دامنه، مسیر یا الگوی تعریفشده به سرویسهایی مانند Node.js، PHP-FPM، Java یا کانتینرهای داخلی میفرستد.
-
خاتمه TLS
NGINX Open Source میتواند اتصال HTTPS را خاتمه دهد تا سرویسهای داخلی با تنظیمات سادهتر اجرا شوند. برای دریافت، تمدید و جایگزینی گواهی معمولاً به ابزار یا سرویس ACME جداگانه نیاز دارید؛ خود NGINX فرایند تمدید خودکار گواهی را انجام نمیدهد.
-
سرویسدهی فایلهای استاتیک
فایلهایی مانند تصویر، فونت، CSS و JavaScript را بدون عبور از اپلیکیشن بکاند تحویل میدهد و میتواند برای آنها هدر Cache-Control تعریف کند.
-
توزیع بار میان چند سرویس
با تعریف upstream، درخواستها را میان چند نمونه سرویس توزیع میکند. NGINX Open Source از بررسی سلامت غیرفعال استفاده میکند و در صورت مشاهده خطاهای ارتباطی، مقصد را برای مدتی از انتخابهای بعدی کنار میگذارد. بررسی سلامت فعال HTTP در NGINX Plus ارائه میشود.
-
مسیریابی مبتنی بر دامنه و مسیر
میتوان چند دامنه یا چند بخش از یک محصول را روی یک سرور مدیریت کرد؛ مثلاً /api به بکاند و مسیر اصلی به فایلهای فرانتاند برسد.
-
کنترل ترافیک و درخواستها
در NGINX Open Source میتوان نرخ پردازش درخواستها و تعداد اتصالهای همزمان را محدود کرد و برای درخواستها و ارتباط با سرویسهای پشتصحنه محدودیت زمانی تعیین کرد. این تنظیمات میتوانند از فشار بیش از حد بر سرویس جلوگیری کنند، اما جایگزین ظرفیتسنجی و طراحی مناسب زیرساخت نیستند.
کاربردها
برای آشنایی بهتر با این ابزار، توجه به موارد زیر میتواند مفید باشد.
-
انتشار فرانتاند و API روی یک دامنه
فایل خروجی React، Vue یا Angular از NGINX سرویسدهی میشود و درخواستهای /api با پراکسی معکوس به سرویس بکاند فرستاده میشوند.
-
قرار دادن HTTPS جلوی یک اپلیکیشن داخلی
اپلیکیشن روی شبکه داخلی یا پورت غیرعمومی اجرا میشود و NGINX خاتمه TLS و اتصال HTTPS کاربران را مدیریت میکند.
-
توزیع بار میان چند نمونه اپلیکیشن
وقتی چند نمونه از یک سرویس برای پاسخگویی به ترافیک اجرا شدهاند، NGINX Open Source میتواند درخواستها را میان آنها توزیع کند.
-
استقرار سرویسهای کانتینری
در یک سرور یا محیط Docker، NGINX میتواند تنها نقطه ورودی عمومی باشد و سرویسهای کانتینری را از طریق شبکه داخلی در دسترس قرار دهد.
-
هدایت نسخه جدید سرویس بهصورت مرحلهای
با استفاده از upstreamها و قواعد مسیریابی میتوان بخشی از درخواستها را به نمونه یا نسخه جدید سرویس هدایت کرد. پیادهسازی انتشار تدریجی به روش استقرار، نحوه تقسیم ترافیک و قابلیتهای موردنیاز بستگی دارد و NGINX بهتنهایی جایگزین سامانه کامل مدیریت انتشار نیست.
پرسشهای رایج درباره انجیناکس
اگر درباره این ابزار پرسشی دارید، ممکن است پاسخ آن را در میان موارد زیر پیدا کنید.
آیا NGINX جایگزین برنامه بکاند است؟
خیر. NGINX معمولاً درخواست را مدیریت و به سرویس بکاند هدایت میکند. منطق کسبوکار، دسترسی به پایگاه داده و API معمولاً در اپلیکیشن بکاند اجرا میشوند.
آیا برای استفاده از NGINX باید لینوکس بلد باشم؟
برای کار حرفهای، بله. باید دستکم با فایلها و مجوزها، پورتها، فرایندها، لاگها و ابزارهای پایه مدیریت سیستم در لینوکس آشنا باشید.
تفاوت وبسرور و پراکسی معکوس در NGINX چیست؟
در نقش وبسرور، NGINX فایل را مستقیماً به کاربر میدهد. در نقش پراکسی معکوس، درخواست کاربر را دریافت میکند و آن را به سرویس دیگری در پشت خود میفرستد.
آیا NGINX برای توزیع بار کافی است؟
برای سناریوهایی که چند مقصد نسبتاً ثابت دارید و توزیع بار ساده و بررسی سلامت غیرفعال کافی است، NGINX Open Source میتواند گزینه مناسبی باشد. اگر به بررسی سلامت فعال، قابلیتهای پیشرفتهتر مدیریت ترافیک یا مدیریت پویای گروههای upstream نیاز دارید، NGINX Plus یا ابزار مناسب معماری خود را بررسی کنید. در Kubernetes نیز معمولاً ابزارهای ورودی و متعادلکننده بار متناسب با معماری کلاستر استفاده میشوند.
برای یادگیری NGINX از کجا شروع کنم؟
اگر با لینوکس و HTTP آشنا هستید، ابتدا یک فایل استاتیک را با NGINX سرویسدهی کنید و سپس یک سرویس محلی را با پراکسی معکوس در دسترس قرار دهید. در مرحله بعد، access log و error log را هنگام بروز خطا بررسی کنید، یک گواهی TLS تنظیم کنید و توزیع بار میان چند سرویس را تمرین کنید. در نهایت، محدودسازی نرخ درخواست و سناریوهای خرابی سرویس مقصد را آزمایش کنید تا بتوانید رفتار NGINX و لاگهای آن را تفسیر کنید.