Nginx nədir? Harada istifadə edilir?

nginx.org saytının “about” bölməsinə baxdığımız zaman  “http serveri, reverse proxy serveri, mail proxy serveri və ümumi TCP/UDP serveri” olaraq izah edilib.  Bu izaha, Nginx-in ilk dəfə İqor Sysoev adlı bir Rus tərəfindən hazırlanmış olduğunu, uzun müddət Yandex, Mail.ruVK kimi çox yüksək trafikə malik Rus saytlarında istifadə edilərək inkişaf etdirildiyini, Dropbox, NetflixWordpress.com kimi bir çox böyük layihənin uğurunda rol oynadığını da əlavə etməliyik.

Nginx həm də açıq mənbə kodlu bir proqramdır. Nginx-in mənbə kodlarını incələmək üçün http://hp.nginx.org/nginxhttps://github.com/nginx/nginx ünvanlarına baş çəkə bilərsiniz.

Nginx-i hansı hallarda istifadə edə bilərik?

1) Statik veb saytlarını işlətmək üçün: Statik fayllardan ibarət olan bir veb saytınız varsa, ya da paylaşmaq istədiyiniz fayllarınızın yerləşdiyi bir arxivi internetə açmaq istəyirsinizsə Nginx-i veb server olaraq istifadə edə bilərsiniz. Nginx yaddaşdakı faylları avtomatik olaraq indeksləyəcək və sizə təqdim edəcək. Lakin unutmamaq lazımdır ki, autoindexing funksiyasını bilmədən aktiv saxlasanız paylaşmaq istəmədiyiniz bütün fayllarınızı internet ilə paylaşmış olacaqsınız.

2) Dinamik veb saytlarını işlətmək üçün: PHP, Python, Java, .Net və s. dillərdə hazırladığınız bir veb saytınız varsa və onu internetə açmaq istəyirsinizsə bu saytı işlədəcək bir proqrama ehtiyacınız var.

Məsələn PHP ilə kodlaşdırılmış bir layihəni işlətmək üçün serverdə PHP-FPM qurulmuş olmalıdır. Ya da Python istifadə edərək Django Framework ilə bir layihə hazırlamısınızsa bir əmr ilə layihənizi 80 portunu dinləyərək işləyəcək hala gətirə bilərsiniz. Ancaq nə PHP-FPM-i, nə Django-nun “built-in” server funksiyasını, nə Tomcat-ı nə də IIS-i minlərlə istifadəçinin işlədəcəyi bir layihə üçün birbaşa internetə açmaq o qədər də yaxşı fikir olmaya bilər.

Nginx bu vəziyyətlərdə köməyimizə çatır və kənardan gələn bütün “requestlərə” sinə gərir. Nginx-in inkişaf etmiş qoşulma idarəsi, “load balancing” yəni yük balanslama və paylama xüsusiyyəti, keş funksiyaları vasitəsilə veb serverləin 80 və 443 portlarını Nginx-ə əmanət edə bilirik.

Beləcə kənardan gələn müraciətləri Nginx qarşılayır, qeyd etdiyimiz tənzimləələrə görə keş xüsusiyyətini görür, statik faylları birbaşa təqdim edir və istədiyiniz “requestləri” də “backend” serverinə göndərərək “reverse proxy” əməliyyatını yerinə yetirir. Nginx-in alışana qədər işgəncə çəkdirən amma alışdıqdan sonra hər şeyə “mən bunu nginx ilə həll edərəm” dedirtməyi bacaran config faylları da burada bizə çox köməkçi olur.

3) “Load Balancing” - “Yük Balanslarşdırma” üçün: 2-ci bölmədə qeyd etdiyimiz kimi “backend” serverlərimizi ayıraraq qarşılarına “reverse proxy” oalraq bir nginx yerləşdirdik. Real həyatda bir çox vəziyyətdə (haradasa həmişə) bir “backend” serveri kifayət etməyəcək.  Proqramınız yüksək performans ilə işləsə və serverləriniz çox güclü olsa da hər hansı bir işi görən sadəcə bir server (vm ya da container) olması bəzi hallarda çıxılmaz bir problemə gətirib çıxara bilər. Bunun qarşısını almaq üçün “production” mühitlərində hər zaman birdən çox (adətən ən az 3) “backend” server istifadə edilir.

Ancaq “Load balancing” xüsusiyyətindən istifadə etdiyinizdə bu serverlərə gedən  “requestləri” idarə edəcək, balanslaşdıracaq və hər hansı birində problem olduğu vaxtlarda artıq ona “request” göndərməyərək istifadəçilərin səhvliklə qarşılaşmasına mane olan bir mexanizm əldə etmiş olursunuz. Nginx yenə burada meydana girir və bu işi öz üstünə götürür. Nginx configlərində “backend” hovuzları yaradıb serverlərə müəyyən ağırlıqlar verə bilər, müəyyən serverləri backup olaraq təyin edə bilər, healthcheck modulu ilə sağlam olmayan serverləri hovuzdan müəyyən müddətliyinə ayıra bilərsiniz.

4) “Caching” üçün: Deyək ki, yuxarıdakı maddələri tətbiq etdik, “load balancing”i də aktivləşdirdik. Ancaq işimiz hələki bitməyib. Məsələn bir xəbər saytı idarə ediriksə istifadəçi ya da redaktorlar yeni bir məzmun daxil edənə qədər əsas səhifəmiz dəyişməyəcək. Hər nə qədər “backend” tərəfində məlumat bazasından göndərdiyimiz sorğuları və s. keşləsək də hər gələn “request” üçün “backend” serverlərinin təkrar işləməsini və buradakı qoşulma sayının artmasını istəmərik.

Nginx üzərində lazımi tənzimləmələri edərək “backend”dən gələn “response”lların istədiyimiz müddətdə keşlənməsinə nail ola bilərik. Məsələn 200 kodu ilə gələnləri 1 dəqiqə, 301-ləri 5 dəqiqə, 404-ləri 1 saat keşə almağı əmr edə bilərik. Keşdəkiləri manual olaraq silməli olsaq, “cachepurge” modulunu istifadə edərək silə bilərik.

Nginx-in keşlədiyi “responseları” yaddaşda saxladığını, burdakı performasın disk oxuma və yazmaq sürətinə bağlı olduğunu, çox yüksək performas ehtiyacını varsa keş yolunun ram üzərində tutulacaq formada tənzimlənə biləcəyini də xatırladaq.

5) Ümumi TCP/UDP proxy olaraq: Yuxarıdakı maddələrin hamısında HTTP/HTTPS qoşulmalarından danışdıq. Ancaq Nginx-in bacarıqları bunlarla sərhədlənmir. TCP ya da UDP protokolları ilə işləyən hər hansı bir şəbəkə tətbiqinin qarşısında “proxy” olaraq Nginx istifadə edə bilərsiniz. Məsələn bir “memcached” hovuzunun qarşısında  “load balancer” olaraq istifadə edə bilərsiniz.

Nginx ödənişsizdir mi?

Bəli və xeyr. Nginx-in http://nginx.org saytından yükləyə biləcəyiniz ödənişsiz bir versiyası mövcuddur. Bir çox hal üçün bu versiya kifayət edəcəkdir. Ancaq inkişaf etmiş xüsusiyyətlər və xüsusilə də Nginx komandasından mütəmadi dəstək almaq istəyirsinizsə https://www.nginx.com saytında daxil olaraq ödənişli versiyadan yararlana bilərsiniz. Qiymətlərin kiçik və orta ölçülü layihələr üçün çox da uyğun olmadığını vurğulaya bilərəm, lakin başda da qeyd etdiyim kimi ödənişsiz versiya bir çox hallarda işinizi artıqlamasıyla görəcək.

Hansı platformada işləyir?

Hardasa bütün platformalarda işləyir, Unix/Linux sistemlərdə, Windows ya da Mac OS X platformalarında işləyir. Lakin “production” üçün istifadə edəcəksinizsə məcbur olmadığınız hallar istisna olmaqla Windows Server üzərində Nginx işlətmək çox da məntiqli bir addım deyil. Hər hansı bir Linux distrosunun LTS versiyasına tətbiq edəcəyiniz Nginx, başınızı ağrıtmadan uzun illər ağır yük altında işləyə bilər.

Necə qurulur? Nginx yükləmək çətindir mi?

Linux üzərində qurulumu paket idarəedicisindən hər hansı bir proqram qurmaqdan daha çətin deyil. Paket idarəedicinizdə müasir versiya mövcud deyilsə yenə http://nginx.org/en/linux_packages.html#stable ünvanındakı rəsmi nginx repolarından istifadə edərək yükləyə bilərsiniz. Qurduqdan sonrakı tənzimləmələrin də Linux-la tanış olan insanlar üçün çox da çətin olmayacağını düşünürük.

Nginx-i xüsusiləşdirmək, fərqli modullar əlavə etmək istəyirsinizsə yükləməni Nginx-in mənbə kodlarından istifadə edərək reallaşdırmalısınız. Bu da yenə lazımi məlumata malik şəxslər üçün çətin bir prosedur deyil.

Qısa qeydlər

  • HTTP/2 dəstəkləyir.

  • SSL/TLS və SNI dəstəyi var.

  • Asanlıqla HTTP Basic Authentication tənzimləyə bilərsiniz.

  • Nginx-ə configlərdə göstərilməyən bir server_name (domen adı ya da ip) ilə müraciət gəlsə configdəki ilk “server” altında prosedura alınır. Xətaların qarşısını almaq üçün “00-default.conf” kimi bir adla default site tənzimləməsini etməlisiniz.

  • 2018 Aprel statistikasına görə istifadəsi sürətlə artmağa davam edərkən yüksək trafikli saytların 25%-dən çoxunda istifadə edilir.

  • Nginx Inc. tərəfindən yaxın zamanda elan edilənAmplify adlı məhsul ilə Nginx serverlərini “monitorinq” edə bilərsiniz.

  • Nginx olduqca RAM dostu bir proqramdır. 2 Core və 2 GB Ram kimi konfiqurasiyalar ilə kifayət qədər yüksək trafikləri idarə edə bilərsiniz.

  • Eyni server üzərində həm Nginx həm də PHP-FPM işlədəcəksinizsə proxy modulu yerinə FASTCGI modulunu istifadə edə bilərsiniz. FPM-ləri TCP deyil, “soket” modunda işlədə bilərsiniz.

Alternativlər

Yuxarıda da qeyd edildiyi kimi Nginx, bir çox fərqli məqsəd üçün istifadə edə biləcəyiniz bir proqramdır. Təbii ki, Nginx-in fərqli işlər üçün bir çox fərqli alternativi mövcuddur. Məsələn bir PHP layihəsini işlətmək üçün Apache Server qura bilərsiniz. “Load Balancing” və “Caching” üçün Varnish istifadə edə bilərsiniz. TCP Load Balancer olaraq Haproxy ya da cache serverləriniz üçün Twemproxy istifadə edə bilərsiniz. Hər xüsusi sahə üçün bunların üstünlükləri və mənfi cəhətləri ola bilər. Dəqiq bir seçim edə bilmək üçün ehtiyacların və imkanların yaxşı analiz edilib ona görə bir dəyərləndirmə etmək lazımdır.

Nəticə

Nginx çox kiçik, çox sürətli işləyən ancaq bacarıqları da olduqca çox olan bir proqramdır. İstifadə edilməsi bəzi hallarda məcburiyyət, bəzi hallarda seçim əsasında ola bilər. Ancaq hər iki halda da bir veb proqramçının ya da sistem administratorunun Nginx-in bacarıqlarını mütləq şəkildə çox yaxşı bilməli olduğunu düşünürük.