Nginx Nedir, Detaylı anlatım | [ Rabbyte Sysadmin GURU ]
Bu yazı Aralık 2, 2019 tarihinde Ali Çömez tarafından yazılmıştır.
Last updated on Aralık 11, 2019
Nginx (Engine-X olarak telaffuz edilir) açık kaynaklı, hafif, yüksek performanslı bir web ve proxy sunucusudur. HTTP, HTTPS, SMTP, IMAP, POP3 protokolleri için ters proxy sunucusu olarak kullanılabilir. Nginx, Rusya’da 2002 yılında Igor Sysoev tarafından tasarlandı ve geliştirilmeye başlandı. Yüksek performanslı http web sunucusudur. Ters proxy olarak da kullanılır. Yüksek eşzamanlı web isteği sunabilir. Nginx düşük bellek kullanımı ile yüksek eşzamanlılık sunmak için tasarlanmıştır. Her web isteği için yeni işlemler oluşturmak yerine, Nginx, isteklerin tek bir iş komutu dizisinde ele alındığı zaman, olaya dayalı bir yaklaşım kullanır.
Nginx ile ana işlem birden fazla çalışan işlemi kontrol edebilir. Nginx eşzamansız olduğundan, her istek diğer istekleri engellemeden aynı anda yürütülebilir. Nginx, sunucu yük dengeleme ve HTTP Önbelleği için de kullanılır. Nginx, içerik ve uygulama dağıtımını hızlandırır, güvenliği artırır, internetteki en yoğun web siteleri için kullanılabilirliği ve ölçeklenebilirliği kolaylaştırır.
Nginx, eşzamanlı büyük istekleri yerine getirmek için web sunucusu olarak kullanılan bir tür yazılımdır. Daha önce bu işlevleri yerine getirmek için web sunucusu olarak Apache‘yi kullanıyorduk, ancak dünya büyüyüp daha fazla şey talep ederken eşzamanlılık terimi devreye giriyor ve Nginx tamda bu konuya eğiliyor.
Apache, 1995’te çoklu görev kavramı olmadığı zaman ortaya çıkmıştı. Daha sonra çoklu görevlere ihtiyaç duyulduktan sonra, sorunun üstesinden gelmek için Apache’ye MPM (Çoklu İşleme Modülü) eklendi. Ancak bu yeni özellik ile bellek tüketimi önümüzdeki yıllarda da artmaya başladı; diğer taraftan dev siteler her gün milyonlarca hit almaya başladı. Bu yüzden sorunları düzeltmek için yeni bir platform veya Apache’de değişiklik yapılması gerekiyordu. Bu konu C10K (Eşzamanlı 10 Bin) Sorunu olarak adlandırıldı.
Ardından Igor Sysoev, bu sorunu aşmak için 2002’de Nginx’i geliştirmeye başladı ve 2004’te ilk kez piyasaya sürdü. Nginx doğası gereği çok fazla kaynağa ihtiyaç duymadan, çok sayıda eşzamanlı talebi yerine getirebildi ve C10K sorununu çözdü.
Nginx’in önemi nedir?
Apache ile büyüyen insanlar için, Apache’nin 10k bağlantıyı eşzamanlı olarak idare edebilme fikri artık komik gelmeye başladı. Apache aynı zamanda birçok aktif bağlantıyı aynı anda, performans açısından ele alma konusunda zaten sorunlar yaşıyordu.
Aslında Nginx, Apache ile HA-Proxy arasında bir yerdeki boşluğu dolduruyor. Önbellekleme kurulumunuz olduğunda Varnish‘in yaptığı bazı işleri bile yapabiliyor. Nginx, işletim sisteminiz / donanım / uygulama yığınınız boğulmadığı sürece önbellek yükleyebilir, statik dosyalar sunabilir, bağlantıları arka uç sunuculara yönlendirerek dinamik içerikler sunabilir.
Bu konulara biraz uzak olan arkadaşlarımız için daha anlaşılır bir dilde anlatmak gerekirse. Nginx aslında tekerleği çıkarıp yeniden icat eden ve çok kullanışlı bir tekerlek tasarlayan birinin güzel bir örneğidir. Apache uzun süredir ihtiyaçlar için önemli bir standart olmuştu, fakat aynı zamanda fazla kiloları olan bir sporcu olduğunu herkes biliyordu. İnsanlar zaten Apache’ye alternatif çözümler arıyorlardı ve Nginx fiks vücutlu, formda bir sporcu olarak karşılarına çıktı.
Apache sunucusu her bağlantı veya istek için bir iş dizisi kullanır. Verilen her isteğin işlenmesi süresince bu iş dizisi parçacıklarını ayırarak çalışır. Kullanılacak çok sayıda iş dizisi olduğu zaman yalnızca bu komutları işleyebilir. Bu da, başka bir komutun engellenmesine yol açar, yani yeni bir iş dizisi isteği karşılanmayacaktır. Ama Nginx’te böyle bir şey yoktur. Zaten Mimarisi olay odaklıdır, aynı anda çok sayıda HTTP isteğini yönetebilir.
Ekstra kaynak kullanmadan daha fazla sayıda kullanıcıya hizmet verebilir. Bu, daha fazla RAM kullanımıyla sonuçlanan diğer her istek için bir kopya oluşturan Apache Server’a göre bir avantajdır. Diğer hafif web sunucularına göre de bir avantaja sahiptir ve yaygın olarak kullanılan en popüler sunuculardan biri olan Apache’den çok daha hızlıdır.
Statik dosyalar Nginx sunucusu tarafından çok verimli bir şekilde sunulur. Web sitesini daha hızlı yapar ve Google’da sıralamalarını yükseltir
Nginx Ters Proxy özelliği
Nginx, Uygulama sunucusundaki yükü azaltmaya ve Donanımı etkin bir şekilde kullanmaya yardımcı olan ters bir proxy sunucusu olarak hizmet verebilir.
Trafiği yoğun web siteleri için daha güvenli ve idealdir.
Nginx Performans ve Hız
Nginx sunucusu apache tarafından yapılan her şeyi çok daha yüksek bir hızda yapabilir. Bu da onu, Apache’ye büyük bir rakip ve daha iyi bir alternatif yapar.
Nginx, çok sayıda paralel bağlantıyı koparmadan gerçekleştirebilen kararlı bir sunucu hizmeti sağlar.
Nginx birden fazla sunucu özelliği
“Nginx Controller”, birden fazla Nginx sunucusunu kolayca barındırma özelliğini sağlayan Nginx’in bir ürünüdür.
Nginx, çeşitli geliştirme teknolojileri ve dillerle birlikte çalışabilen, yüksek performanslı bir web sunucusudur. Birçok farklı duruma uyum sağlayabilir ve ilk günden itibaren yoğun trafik gereksinimlerini karşılayacak şekilde tasarlanmıştır. Statik dosyalar sunmak için kullanılmasına rağmen, PHP gibi dillerde sunucu tarafında programlama içeren sayfalar sunabilir.
Nginx olaya dayalı süreci takip eder; Apache gibi her işlem için ayrı bir istek dizisi yaratmaz, ancak işlemin olaylarını akıllıca izler. Çalışan tek bir bağlantı bir seferde yaklaşık 1024 bağlantı yapabilir, işte en büyük yeteneği bu. Sahip olduğunuz sunucunun türüne bağlı olarak Nginx’te çalışan işlemin “n” sayıları olur ve her çalışan işlem daha fazla sayıda eşzamanlı isteği işleyebilmesi için farklı işlemleri idare eder. Yani, çalışan işlem istekleri yalnızca benzersiz isteklere hızlı bir şekilde yanıt veren Nginx Ana İşlemine aktarır.
Bu, evdeki su borusu tesisatındaki su akışını sorunsuz şekilde tüm musluklara iletilmesi gibi birbirlerini bloke etmeden aynı anda gerçekleşebileceği anlamına gelir. Böylece Nginx, neredeyse paylaşılan kaynakları tek bir bağlantıya adanmadan ve engellenmeden geliştirir. Bu yüzden Nginx aynı işi daha az miktarda bellek ile yapabilir ve bu belleği optimize edilmiş bir şekilde kullanır.
Nginx’in artıları ve eksileri nelerdir?
NIGNIX özelliklerinin hepsini bir web sunucusunda barındırır. Ayrıca ters proxy, önbellek, yük dengeleme, medya akışı ve daha fazlası için kullanılır. Bununla ilgili bazı avantaj ve dezavantajları vardır.
Kod tabanı genellikle bir kişi tarafından yazılır.
Düşük hafıza alanı, modüler tasarım.
Dostça bir konfigürasyona sahiptir.
Alternatif web sunucularına göre tasarımda daha moderndir.
Olay temelli olduğundan bağlam değiştirme vb. nedeniyle daha az ek yük ile daha fazla bağlantıyı yönetebilirsiniz. Nginx bekleyen bağlantılarını uygulama sunucusuna yükleyebilir ve gecikmeyi azaltmak için uygun bitiş noktaları bile seçebilir. Ayrıca, başarısız arka plan makinelerinin sorunsuz bir şekilde kaldırılabileceği arıza süreçleri üzerinde daha fazla kontrol sağlar.
Nginx, statik içeriğin işlenmesinde performansı artırmaya yardımcı olur. Bu, uygulama sunucunun gereksiz trafiğini önlemeye yardımcı olur.
Sunucu yönetimi, uygulama sunucuları ve web sunucuları için ayrı katmanlarla da basitleştirilebilir.
Apache kadar modül / eklenti barındırmaz
Apache’den daha az topluluk desteğine ve belgeye sahiptir, ancak uzmanlık ve kullanım durumunuza bağlı olarak fazlasıyla yeterlidir.
Nginx ile Apache karşılaştırma (Nginx vs Apache)
Açık kaynaklı Apache web sunucusu çok uzun zamandır mevcut ve çok fazla kullanıcısı olduğu için, pek çok modül yazılmıştır – bunların çoğu açık kaynaklıdır. Örneğin popüler bir yapılandırma, statik web sayfalarını sunuculamak ve Apache’yi etkileşimli bir uygulama yapmak için Tomcat’ta Java ve JSP kodunu çalıştırmak üzere mod_jk modülü kullanmaktır. Başka bir örnek, cgi kullanmak zorunda kalmadan php komut dosyalarını çalıştırmak için mod_php kullanmasıdır.
Ancak Apache, yeni işlemlerin ortaya konması nedeniyle ağır yükler altında yavaşlar, bu nedenle daha fazla bilgisayar belleği kullanır. Ayrıca, belleğe ve CPU’ya erişmek için başkalarıyla rekabet etmesi gereken yeni konular oluşturur. Apache ayrıca, trafik yöneticisi tarafından yapılandırılan işlemlerin sınırına ulaştığında da yeni bağlantıları reddedecektir.
Nginx, Apache ile ilişkilendirilen bazı performans ve ölçeklenebilirlik konularını ele almak için yazılmış açık kaynaklı bir web sunucusudur. Ürün açık kaynaklı ve ücretsizdir, ancak Nginx Plus sürümünü satın alırsanız Nginx profesyonel destek sunar. Nginx gerçekten olaya dayalıdır. Mimarilerini “olaya dayalı ve asenkron” olarak adlandırıyorlar. Apache süreçlere ve konulara dayanır. Peki, fark nedir?
Apache, ek bağlantılar için işlemler ve diziler oluşturur. Yönetici, sunucuyu izin verilen maksimum işlem sayısını kontrol edecek şekilde yapılandırabilir. Bu yapılandırma, makinedeki mevcut belleğe bağlı olarak değişir. Çok fazla işlem belleği tüketir ve makinenin belleği değiştirmesine ve performansı düşürmesine neden olabilir. Ayrıca, işlem sınırına ulaşıldığında Apache ek bağlantıları reddeder.
Apache çatallanmış veya çalışan çoklu işlem modunda (MPM) çalışacak şekilde yapılandırılabilir. Her iki durumda da ek kullanıcılar bağlandıkça yeni süreçler yaratır. İkisi arasındaki fark, önceden çatallanmış modun her biri bir kullanıcı isteğini yerine getiren işlem başına bir iş dizisi yaratmasıdır. Çalışan modu da yeni işlemler oluşturur, ancak her birinde kullanıcı başına bir istek işleyen birden fazla iş dizisi vardır. Böylece, bir iş modundaki işlemi birden fazla bağlantı ve bir çatal öncesi modu işlemi yalnızca bir bağlantıyı gerçekleştirir.
Çalışan mod çatallı moddan daha az bellek kullanır, çünkü işlemler işlem içinde çalışan koddan başka bir şey olmayan iş dizilerinden daha fazla bellek kullanır.
Dahası, iş modundaki iş dizisi güvenli değildir. Burada, mod_php gibi güvenli olmayan modülleri kullanıyorsanız, php sayfalarını sunmak için önceden çatallanmış mod kullanmanız gerekir, böylece daha fazla hafıza tüketirsiniz. Bu yüzden, modülleri ve konfigürasyonu seçerken, konuya göre süreç optimizasyon ve kısıtlama problemleriyle yüzleşmelisiniz.
Apache’yi ayarlamanın sınırlayıcı faktörü hafızadır ve aynı CPU ve hafıza için rekabet eden kilitlenmemiş diziler için potansiyeldir. Bir iş dizisi durdurulursa, kullanıcı işlemi serbest bırakana kadar web sayfasının görünmesini bekler, böylece sayfayı geri gönderebilir. Apache bir iş dizisi kilitlendiyse, yeniden nasıl başlatılacağını bilmez, bu yüzden sıkışmış kalır.
Nginx, özellikle iş dizisinin nasıl işlediğiyle ilgili olarak Apache’den farklı çalışır. Nginx her web isteği için yeni işlemler oluşturmaz, bunun yerine yönetici ana Nginx işlemi için kaç işlemi oluşturulacağını yapılandırır. (İlk kural, her CPU için bir çalışan işlemin yapılmasıdır.) Bu işlemlerin her biri tek iş dizileridir. Çalışan her ana bağlantı binlerce eşzamanlı bağlantıyı yönetebilir. Bunu, çok iş dizili programlama kullanmak yerine, tek bir iş dizisi ile eşzamansız olarak yapar.
Nginx ayrıca, diskten veri okumak ve önbelleğe yüklemek ve yönlendirildiğinde önbellekten çıkarmak için önbellek yükleyici ve önbellek yöneticisi işlemlerini kapatır.
Nginx, tasarlama ve geliştirme zamanlarında dahil edilen modüllerden oluşur. Bu, kullanıcının kaynak kodu indirebildiği ve hangi modüllerin derleneceğini seçtiği anlamına gelir. Arka uç uygulama sunucularına, yük dengelemeye, proxy sunucusuna ve diğerlerine bağlantı için modülleri vardır. PHP için modül yoktur, çünkü Nginx PHP kodunu kendisi derleyebilir.
Nginx’in olay odaklı, asenkronize ve blokajsız olduğu söyleniyor. “Olay” bir kullanıcı bağlantısı anlamına gelir. “Asenkron”, aynı anda birden fazla kullanıcı bağlantısı için kullanıcı etkileşimi gerçekleştirdiği anlamına gelir. “Bloke etmemek”, CPU meşgul olduğu için diski durdurmadığı anlamına gelir; Bu durumda, disk serbest bırakılana kadar diğer olaylar üzerinde çalışır.
Apache ile Nginx Özet
Hem Apache hem de Nginx, modern web taleplerinin ihtiyaçlarını karşılamak için çeşitli iş yüklerini idare edebilen açık kaynaklı yüksek performanslı web sunucularıdır. Kavramsal olarak birbirlerine yakındırlar, ancak web sunucusu-proxy işinde rakiplerdir. Apache, 20 yıldır web sunucusu sisteminde liderdir ve çok daha popülerdir, ancak Apache geçmişte kalırken, Nginx web uygulamalarının ve web sitelerinin geleceğidir.
Apache gücü / Nginx hızı için bilinir. Bu, Nginx’in statik içeriği daha hızlı sunabileceği anlamına gelir ancak Apache, arka uç uygulama sunucuları ile çalışmak ve komut dosyası dillerini çalıştırmak için gereken modülleri içerir. Hem Apache hem de Nginx, hem avantaj hem de dezavantajları için mükemmel çözümlerdir. İşletmenizin teknik gereksinimlerine ve gereksinimlerine bağlı olarak, sizin için uygun olanı seçebilirsiniz. Yeni kullanıcılar için Nginx daha iyi bir seçenektir.
Diğer Kaynaklar:  Wikipedia Nginx
Yayımlanan kategori: Döküman / makale
Ngins vs Apache
Enver Aralık 6, 2019
Elinize sağlık çok güzel bir makale olmuş detaylı bir anlatım.
referans gösterip kullanabilirim 🙂
Ali Çömez Yazar | Aralık 6, 2019
Berna Aralık 9, 2019
Düşüncelerinizi paylaştığınız için teşekkür ederiz. Çabalarınızı takdir ediyorum ve bir sonraki yazınızı bekliyor olacağım
ups bir kez daha teşekkür ederim.
Ali Çömez Yazar | Aralık 9, 2019
Bryan Aralık 9, 2019
Hmm, sanırım web sitenize ilk yorumumu yaptım (yazıyı okumak süper uzun sürdü), sanırım gördüklerimi özetleyeyim ve şunu söyleyeyim:
Blogunuzun iyice tadını çıkarın. Ben de gelişmekte olan bir blog yazarıyım ama her şeyde hala yeniyim.
Acemi blog yazarları için yararlı ipuçlarınız var mı?
Kesinlikle takdir ediyorum bloğunuzu.