
Nginx (تلفظ: Engine-X) یک وبسرور متنباز و با کارایی بالا است که به دلیل سبک بودن، مقیاسپذیری و توانایی مدیریت تعداد زیادی اتصال همزمان شناخته میشود. این نرمافزار در سال ۲۰۰۴ توسط ایگور سیسویف (Igor Sysoev) توسعه یافت و به طور گسترده برای میزبانی وبسایتها، متعادلسازی بار (Load Balancing)، پروکسی معکوس (Reverse Proxy)، و کش کردن محتوا استفاده میشود.
Nginx یک وبسرور متنباز و بسیار محبوب است که به دلیل عملکرد بالا، مصرف کم منابع، و توانایی مدیریت ترافیک سنگین در وبسایتهای پربازدید شناخته میشود. تا سال ۲۰۱۹، Nginx در حدود ۳۸٪ از وبسایتهای فعال در اینترنت (بر اساس آمار W3Techs) استفاده میشد و رقیب اصلی وبسرور Apache بود. این محبوبیت، Nginx را به یک دارایی استراتژیک برای هر شرکتی در حوزه فناوری تبدیل کرده بود.
در ۱۱ مارس ۲۰۱۹، شرکت F5 Networks، که یک شرکت پیشرو در زمینه فناوریهای شبکه، تحویل برنامهها (Application Delivery) و امنیت سایبری است، اعلام کرد که شرکت Nginx، Inc. را به مبلغ تقریبی ۶۷۰ میلیون دلار خریداری کرده است. این معامله به صورت نقدی انجام شد و هدف آن تقویت موقعیت F5 در بازار تحویل برنامهها و ارائه خدمات ابری بود.
با رشد سریع برنامههای ابری و معماریهای میکروسرویس، شرکتها به دنبال راهحلهایی بودند که بتوانند ترافیک وب را به طور مؤثر مدیریت کنند. Nginx با قابلیتهای پروکسی معکوس، متعادلسازی بار، و پشتیبانی از کانتینرها (مانند Docker و Kubernetes) به یکی از ابزارهای کلیدی در این حوزه تبدیل شده بود. F5 که در زمینه کنترلرهای تحویل برنامه (ADC) و خدمات شبکه تخصص داشت، با خرید Nginx به دنبال تقویت سبد محصولات خود در این بازار رو به رشد بود.
F5 Networks در آن زمان به دنبال گسترش قابلیتهای خود در حوزه چند-ابری (Multi-Cloud) و محیطهای مدرن DevOps بود. Nginx با معماری سبک و انعطافپذیر خود، مکمل محصولات سنتی F5 مانند BIG-IP (یک پلتفرم تحویل برنامه) بود. این خرید به F5 امکان داد تا راهحلهایی جامعتر برای مشتریان ارائه دهد که هم در محیطهای سنتی و هم در محیطهای ابری مدرن کارآمد باشند.
پس از خرید، F5 شروع به ادغام فناوریهای Nginx با محصولات خود کرد. این ادغام به F5 کمک کرد تا راهحلهای پیشرفتهتری برای تحویل برنامهها، امنیت، و مدیریت ترافیک ارائه دهد. به عنوان مثال، Nginx به عنوان یک لایه سبکتر در کنار BIG-IP استفاده شد تا عملکرد بهتری در محیطهای ابری فراهم شود.
Nginx Plus، نسخه تجاری Nginx که شامل ویژگیهای پیشرفته مانند مانیتورینگ، پشتیبانی از API، و قابلیتهای امنیتی است، با حمایت مالی و زیرساختی F5 توسعه بیشتری یافت. این نسخه برای مشتریان سازمانی که به پشتیبانی حرفهای و قابلیتهای اضافی نیاز داشتند، جذابتر شد.
پس از خرید، F5 اعلام کرد که به پشتیبانی از پروژه متنباز Nginx ادامه خواهد داد. کد منبع Nginx همچنان در دسترس جامعه توسعهدهندگان باقی ماند و بهروزرسانیهای منظمی برای آن منتشر شد. این تصمیم به حفظ اعتماد جامعه متنباز کمک کرد. این خرید باعث شد F5 به رقیبی قویتر در برابر شرکتهایی مانند AWS (با ELB)، Cloudflare، و Citrix تبدیل شود. همچنین، این معامله نشاندهنده اهمیت روزافزون فناوریهای متنباز در زیرساختهای مدرن فناوری اطلاعات بود.
Nginx همچنان (تا ۴ خرداد ۱۴۰۴) یکی از پراستفادهترین وبسرورها در جهان است و حدود ۳۳٪ از وبسایتهای فعال از آن استفاده میکنند (بر اساس گزارشهای W3Techs). نسخههای جدید Nginx از پروتکلهای مدرن مانند HTTP/3 و QUIC پشتیبانی میکنند.
ویژگیهای کلیدی Nginx
۱. کارایی بالا: Nginx از معماری مبتنی بر رویداد (Event-Driven) استفاده میکند که باعث میشود منابع سیستمی کمتری مصرف کند و بتواند درخواستهای همزمان زیادی را مدیریت کند.
2. پروکسی معکوس: Nginx میتواند به عنوان یک پروکسی معکوس عمل کند و درخواستها را به سرورهای backend هدایت کند.
3. متعادلسازی بار: این نرمافزار قابلیت توزیع ترافیک بین چندین سرور را دارد که باعث بهبود عملکرد و پایداری میشود.
4. کش کردن: Nginx میتواند محتوای استاتیک و داینامیک را کش کند تا سرعت بارگذاری صفحات وب را افزایش دهد.
5. پشتیبانی از پروتکلها: علاوه بر HTTP، از پروتکلهایی مانند HTTPS، WebSocket، IMAP، POP3 و SMTP پشتیبانی میکند.
6. ماژولار بودن: Nginx از ماژولهای متعددی پشتیبانی میکند که قابلیتهای آن را گسترش میدهند، مانند فشردهسازی، احراز هویت، و امنیت پیشرفته.
تاریخچه و توسعه Nginx
Nginx در ابتدا برای حل مشکل C10k (مدیریت ۱۰,۰۰۰ اتصال همزمان) طراحی شد. مشکل C10k (مخفف ۱۰,۰۰۰ Connections) به چالشی اشاره دارد که در اواخر دهه ۱۹۹۰ و اوایل دهه ۲۰۰۰ در حوزه وبسرورها مطرح شد. این مشکل به توانایی سرورها برای مدیریت همزمان تعداد زیادی اتصال (حدود ۱۰,۰۰۰ یا بیشتر) با حفظ کارایی و پایداری مربوط میشود. در آن زمان، وبسرورهای سنتی مانند Apache به دلیل معماری مبتنی بر Thread یا Process، در سناریوهای پرترافیک با محدودیتهایی مواجه بودند، زیرا هر اتصال نیازمند منابع سیستمی قابلتوجهی (مانند حافظه و CPU) بود.
ایگور سیسویف (Igor Sysoev)، خالق Nginx، در سال ۲۰۰۲ شروع به توسعه این وبسرور کرد تا راهحلی برای مشکل C10k ارائه دهد. او با طراحی یک معماری مبتنی بر رویداد (Event-Driven) و غیرهمزمان (Asynchronous)، توانست وبسروری بسازد که:
۱. مصرف منابع کم: برخلاف Apache که برای هر اتصال یک Thread یا Process جداگانه ایجاد میکرد، Nginx از یک مدل تکموضوعی (Single-Threaded) با حلقه رویداد (Event Loop) استفاده میکند که چندین اتصال را به طور همزمان مدیریت میکند.
2. کارایی بالا: این معماری باعث شد Nginx بتواند هزاران اتصال همزمان را با استفاده از منابع سیستمی بسیار کمتری مدیریت کند.
3. پایداری در ترافیک بالا: Nginx به گونهای طراحی شد که در برابر افزایش ناگهانی ترافیک (مانند Spikeهای ترافیکی) مقاوم باشد.
جزئیات فنی حل مشکل C10k توسط Nginx
– معماری غیرهمزمان: Nginx از مدل ورودی/خروجی غیرهمزمان (Asynchronous I/O) استفاده میکند. به جای ایجاد یک Thread یا Process برای هر درخواست، از مکانیزمهایی مانند epoll (در لینوکس) یا kqueue (در BSD) برای مدیریت رویدادها استفاده میکند. این روش به سرور اجازه میدهد تا به محض آماده شدن هر اتصال، آن را پردازش کند.
– مدیریت اتصالات: Nginx اتصالات را در یک حلقه رویداد نگه میدارد و به جای مسدود شدن (Blocking) در انتظار پاسخ، به سرعت بین اتصالات جابهجا میشود.
– مقیاسپذیری افقی: این وبسرور به راحتی میتواند با افزایش تعداد هستههای CPU یا سرورهای اضافی مقیاسپذیری کند.
وقتی Nginx در سال ۲۰۰۴ به صورت عمومی منتشر شد، به سرعت نشان داد که میتواند تعداد بسیار زیادی اتصال همزمان (حتی فراتر از ۱۰,۰۰۰) را با کارایی بالا مدیریت کند. این امر باعث شد که وبسایتهای پرترافیک مانند نتفلیکس، دراپباکس، و وردپرس از Nginx به عنوان وبسرور یا پروکسی معکوس استفاده کنند.
امروزه، مشکل C10k دیگر یک چالش بزرگ محسوب نمیشود، زیرا سختافزارهای مدرن و فناوریهای شبکه بسیار پیشرفتهتر شدهاند. با این حال، Nginx همچنان به دلیل معماری کارآمد خود یکی از بهترین گزینهها برای مدیریت ترافیکهای سنگین است. در واقع، Nginx نه تنها مشکل C10k را حل کرد، بلکه استانداردهای جدیدی برای مدیریت C100k (۱۰۰,۰۰۰ اتصال) و حتی بیشتر ایجاد کرد.
در ۱۲ دسامبر ۲۰۱۹، گزارش شد که دفاتر شرکت Nginx، Inc. در مسکو توسط پلیس مورد بازرسی قرار گرفته و ایگور سیسویف (Igor Sysoev) و ماکسیم کونوالوف (Maxim Konovalov) بازداشت شدهاند. این بازرسی بر اساس حکمی در ارتباط با ادعای نقض حق مالکیت معنوی توسط شرکت رامبلر (Rambler) انجام شد. رامبلر ادعا میکند که به دلیل اینکه کد Nginx در زمانی که سیسویف کارمند این شرکت بود نوشته شده، تمام حقوق مالکیت آن متعلق به رامبلر است. در ۱۶ دسامبر ۲۰۱۹، بانک دولتی اسبربانک (Sberbank) روسیه، که ۴۶.۵ درصد از سهام رامبلر را در اختیار دارد، جلسه فوقالعادهای با هیئت مدیره رامبلر برگزار کرد و از تیم مدیریتی رامبلر خواست تا از مقامات قضایی روسیه بخواهند پیگیری پرونده کیفری را متوقف کنند و مذاکراتی با Nginx و F5 آغاز کنند.
ایگور سیسویف توسعه Nginx را در سال ۲۰۰۲ به عنوان یک پروژه شخصی آغاز کرد، اما در آن زمان به عنوان کارمند رامبلر (یک موتور جستجو و شرکت رسانهای) فعالیت میکرد. Nginx در سال ۲۰۰۴ به صورت متنباز منتشر شد و به سرعت محبوبیت یافت. در سال ۲۰۱۱، سیسویف شرکت Nginx، Inc. را در آمریکا تأسیس کرد تا نسخه تجاری نرمافزار (Nginx Plus) را توسعه دهد و خدمات پشتیبانی ارائه کند. رامبلر ادعا کرد که چون سیسویف در زمان توسعه اولیه Nginx کارمند این شرکت بود، کد نوشتهشده متعلق به رامبلر است، حتی اگر به صورت متنباز منتشر شده باشد.
این موضوع یک مناقشه حقوقی پیچیده را ایجاد کرد، زیرا Nginx به عنوان یک پروژه متنباز تحت مجوز BSD منتشر شده بود و جامعه جهانی توسعهدهندگان و کاربران از آن پشتیبانی میکردند. ادعای رامبلر میتوانست پیامدهای گستردهای برای پروژههای متنباز داشته باشد، زیرا این سؤال را مطرح کرد که آیا کارفرمایان میتوانند مالکیت کدی را که کارمندان در زمان شخصی خود نوشتهاند، ادعا کنند.
بازداشت سیسویف و کونوالوف واکنشهای منفی گستردهای در میان توسعهدهندگان و شرکتهای فناوری در سراسر جهان ایجاد کرد. این موضوع میتوانست به انزوای رامبلر در بازار فناوری منجر شود. اسبربانک احتمالاً نمیخواست این مناقشه به روابط تجاری با شرکتهای بینالمللی مانند F5 آسیب برساند.
اطلاعات عمومی محدودی درباره نتیجه دقیق این مناقشه وجود دارد، اما گزارشها نشان میدهند که پس از دخالت اسبربانک، فشار بر سیسویف و کونوالوف کاهش یافت و بازداشت آنها احتمالاً موقت بود. مذاکرات بین رامبلر، Nginx، و F5 احتمالاً به توافقی منجر شد، اگرچه جزئیات آن به صورت عمومی منتشر نشده است.
کاربردهای Nginx
۱. وبسرور: میزبانی وبسایتهای استاتیک و داینامیک
Nginx به عنوان یک وبسرور قدرتمند برای میزبانی محتوای وب استفاده میشود. این شامل ارائه فایلهای استاتیک (مانند HTML، CSS، JavaScript، و تصاویر) و همچنین پشتیبانی از محتوای داینامیک (مانند صفحات تولیدشده توسط برنامههای وب) است.
جزئیات فنی:
– محتوای استاتیک: Nginx به دلیل معماری مبتنی بر رویداد (Event-Driven) خود، در ارائه فایلهای استاتیک بسیار سریع عمل میکند. این وبسرور فایلها را مستقیماً از دیسک یا حافظه کش به کاربر ارسال میکند و نیازی به پردازش اضافی ندارد.
– محتوای داینامیک: برای محتوای داینامیک، Nginx معمولاً به عنوان یک پروکسی معکوس عمل میکند و درخواستها را به سرورهای برنامهنویسی مانند PHP-FPM، Node.js، یا Python (با استفاده از WSGI) هدایت میکند.
– کارایی بالا: Nginx میتواند تعداد زیادی درخواست همزمان را با مصرف کم منابع (حافظه و CPU) مدیریت کند، که آن را برای وبسایتهای پرترافیک مانند نتفلیکس یا وردپرس ایدهآل میکند.
– پیکربندی ساده: فایلهای پیکربندی Nginx (مانند `nginx.conf`) به ادمینهای سیستم اجازه میدهند تا به راحتی مسیرها، MIME Types، و سایر تنظیمات را برای میزبانی وبسایتها تعریف کنند.
۲. پروکسی معکوس: هدایت درخواستها به سرورهای برنامهنویسی
Nginx به عنوان یک پروکسی معکوس (Reverse Proxy) عمل میکند و درخواستهای دریافتی از کلاینتها را به سرورهای backend (مانند سرورهای برنامهنویسی) هدایت میکند. این قابلیت برای برنامههای وب مدرن که با فریمورکهایی مانند Node.js، Python (Django/Flask)، یا PHP نوشته شدهاند، بسیار مهم است.
جزئیات فنی:
– عملکرد پروکسی معکوس: Nginx به عنوان واسطه بین کلاینت (کاربر) و سرور backend عمل میکند. این وبسرور درخواستها را دریافت کرده، آنها را پردازش میکند (مانند فشردهسازی یا کش کردن)، و سپس به سرور مناسب ارسال میکند.
– پشتیبانی از پروتکلها: Nginx میتواند با پروتکلهای HTTP، HTTPS، FastCGI، uWSGI، و gRPC کار کند، که آن را با انواع سرورهای برنامهنویسی سازگار میکند.
۳. متعادلسازی بار: توزیع ترافیک بین سرورها برای جلوگیری از اضافهبار
Nginx میتواند به عنوان یک متعادلکننده بار (Load Balancer) عمل کند و ترافیک ورودی را بین چندین سرور backend توزیع کند تا از اضافهبار (Overload) روی یک سرور جلوگیری شود و عملکرد و پایداری بهبود یابد.
جزئیات فنی:
– الگوریتمهای متعادلسازی: Nginx از چندین الگوریتم برای توزیع ترافیک پشتیبانی میکند، از جمله:
– Round-Robin (پیشفرض): درخواستها به ترتیب بین سرورها توزیع میشوند.
– Least Connections: درخواستها به سروری ارسال میشوند که کمترین تعداد اتصال فعال را دارد.
– IP Hash: درخواستهای یک کلاینت خاص (بر اساس IP) همیشه به همان سرور هدایت میشوند.
– بررسی سلامت (Health Checks): در نسخه تجاری (Nginx Plus)، امکان بررسی سلامت سرورهای backend وجود دارد تا درخواستها فقط به سرورهای سالم ارسال شوند.
– مقیاسپذیری: متعادلسازی بار به وبسایتها یا برنامهها کمک میکند تا در برابر افزایش ناگهانی ترافیک (مانند در زمان فروش ویژه یا رویدادهای خبری) مقاوم باشند.
۴. امنیت: محدود کردن نرخ درخواستها و پشتیبانی از TLS/SSL
Nginx ابزارهای متعددی برای افزایش امنیت وبسایتها و برنامهها ارائه میدهد، از جمله محدود کردن نرخ درخواستها (Rate Limiting) و پشتیبانی از پروتکلهای رمزنگاری مانند TLS/SSL.
جزئیات فنی:
– محدود کردن نرخ درخواستها (Rate Limiting):
– Nginx میتواند تعداد درخواستهای ارسالی از یک IP خاص را در یک بازه زمانی محدود کند تا از حملاتی مانند DDoS یا Brute Force جلوگیری شود.
– مثال پیکربندی:
nginx
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
listen 80;
server_name example.com;
location / {
limit_req zone=mylimit burst=20;
}
}
این تنظیم حداکثر ۱۰ درخواست در ثانیه را برای هر IP اجازه میدهد و تا ۲۰ درخواست اضافی را در صف نگه میدارد.
– پشتیبانی از TLS/SSL:
– Nginx از پروتکلهای رمزنگاری TLS/SSL برای ایجاد ارتباطات امن پشتیبانی میکند. این قابلیت برای وبسایتهایی که با HTTPS کار میکنند ضروری است.
– Nginx میتواند گواهینامههای SSL را مدیریت کند و از پروتکلهای مدرن مانند TLS 1.3 پشتیبانی میکند.
– سایر قابلیتهای امنیتی:
– فایروال برنامه وب (WAF): در Nginx Plus، ماژولهای WAF برای محافظت در برابر حملات رایج مانند SQL Injection و XSS در دسترس هستند.
– احراز هویت: Nginx میتواند احراز هویت مبتنی بر رمز عبور یا توکن را پیادهسازی کند.
– محدود کردن دسترسی: امکان محدود کردن دسترسی به IPهای خاص یا محدودههای جغرافیایی.




