NGINX Nedir ve Nasıl Kullanılır?

Merhaba, bu makalede NGINX hakkında bilgi vererek neden ihtiyaç duyduğumuzdan ve ne zaman kullanmamız gerektiğinden bahsedeceğim. Ayrıca sunucu ve Docker olarak 2 farklı ortama kurulumuna ve kullanımına da yer veriyor olacağım.

İçindekiler

1) Web Sunucusu Nedir?

NGINX’in tanımına geçmeden önce web sunucusu kavramının anlaşılması gerekiyor. Örnek üzerinden bakacak olursak tarayıcıdan bir siteye erişmek istediğimizde istemci rolünü oynarız. İstemci olarak bir içeriği görüntüleyeceğimiz zaman arka planda web sunucusuna bir HTTP isteğinde bulunmuş oluruz. HTTP sunucusu isteği kabul eder (her şey yolunda ise) ve istenilen içeriği HTTP Yanıtı olarak geri döner. Temel olarak web sunucu ve istemci arasındaki senaryo bu şekilde olmakla beraber makale konusu NGINX olduğundan dolayı web sunucuları hakkında daha fazla detaya girmeyeceğim.

2) NGINX Nedir?

NGINX, bir HTTP sunucusu olmakla beraber ters vekil sunucusu (reverse proxy server), HTTP önbelleği, yük dengeleyici (load balancer) ve daha birçok amaç için kullanılabilmektedir. Igor Sysoev tarafından 2002 yılında açık kaynak olarak yazılmıştır ve açık kaynak versiyonunun yanı sıra ek özelliklere sahip olan ücretli versiyonu da bulunmaktadır. Günümüzde en çok kullanılan web sunucuları arasında ilk sıralarda yer almaktadır.

Ağır yük altında yüksek performans, düşük bellek kullanımı ve yüksek eş zamanlı çalışma kabiliyetlerine sahiptir. Linux, Unix, Windows ve Mac OS gibi ortamlarda çalışabilmektedir. Ayrıca Docker gibi sanallaştırma teknolojileri ile birlikte de kullanabilirsiniz.

3) Neden NGINX’e İhtiyaç Duyarız?

NGINX’e alternatif olarak Apache ve IIS gibi farklı birçok web sunucusu bulunmaktadır. Bunlar arasında seçim yaparken ihtiyaçlarınız doğrultusunda karar vererek seçim yapmanız en doğrusu olmakla beraber yüksek performans, yük dengelemesi, ters proxy, düşük kaynak tüketimi ve esneklik-güvenlik gibi avantajlarından dolayı NGINX sizin için uygun seçenek olabilir.

4) NGINX Nasıl Kurulur?

İhtiyaçlarınız doğrultusunda yukarıda bahsedilen herhangi bir ortamı seçebilirsiniz. Bu anlatımda NGINX’in Linux/Ubuntu 22.04 ve Docker Compose olmak üzere 2 farklı ortama kurulumu anlatılacaktır.

4.1) Ubuntu’ya NGINX Kurulumu

Öncelikle aşağıdaki Linux komutu ile Ubuntu kütüphane bilgisini güncelleyin.

Sonra NGINX kurmak için aşağıdaki komutu çalıştırın.

Bu komutu çalıştırdıktan sonra size paket bilgilerini sunarak onay isteyecektir. “Y” yazıp enter ile ilerleyebilirsiniz.

Komut tamamlandıktan sonra kurulumu doğrulamak için aşağıdaki komutu çalıştırabilirsiniz.

Aşağıdaki şekilde versiyon bilgisini görebiliyorsanız kurulum başarılı bir şekilde gerçekleşmiş anlamına gelmektedir.

Tarayıcınızda sunucunuzun ip adresini girdiğinizde veya yerel kurulum gerçekleştiriyorsanız locahost adresine gittiğinizde aşağıdaki nginx karşılama ekranını görebilirsiniz.

4.2) Docker Compose ile NGINX Kurulumu

Sunucunuzda Docker’ın yüklü olduğunu varsayarak direkt Docker Compose dosyasının hazırlanma ve ayağa kaldırma konularını anlatıyor olacağım.

İlk adım olarak istediğiniz dizinde docker-compose.yml adında bir dosya oluşturun.

Oluşturmuş olduğunuz dosyayı düzenlemek için açın ve içine aşağıdaki konfigürasyonu ekleyin.

Bu yml dosyası ile 80 portunu ana makinamızdaki 80 portu ile port mapping gerçekleştirerek iliştirdik. Ayrıca nginx konfigürasyonunu gerçekleştireceğimiz conf.d klasörünü docker-compose.yml dosyamızın bulunduğu konuma; log’ları kaydedeceğimiz klasörü de yine aynı konuma volume mapping işlemi ile iliştirdik.

Aşağıdaki Docker komutunu çalıştırınca tıpkı Ubuntu kurulumundaki gibi sunucu ip adresinize veya localhost adresinize tarayıcıdan eriştiğinizde NGINX varsayılan karşılama sayfasını göreceksiniz.

5) Temel NGINX Konfigürasyonları

Bu örnekte temel olarak Docker container’da 8081 portunda çalışan bir uygulama olduğunu varsayarak adrese gelen istekleri bu uygulamaya yönlendiriyor olacağım.

Ubuntu sunucu için /etc/nginx/conf.d konumuna; Docker’a kurduysanız ./conf.d konumuna nginx.conf adında bir dosya oluşturun. Ardından dosyayı düzenleyerek aşağıdaki şekile getirin.

Bu konfigürasyon dosyasında listen 80; satırı ile 80 portunu dinliyoruz. server_name değerine alan adını yazmalısınız (Örn: my_domain.com). access_log ve error_log kısımları ile log dosyalarının konumlarını belirttik. acces_log istekte bulunanların kullanıcı aracısı metni (user agent) ile beraber sunucunun döndüğü yanıt gibi bilgileri tutarken error_log gelen isteklerde oluşan hataları tutar.

location bloğu içerisinde proxy_pass ile my_domain.com adresine gelen istekleri Docker container’ındaki 8081 portunda çalışan uygulamaya yönlendiriyoruz. Böylece kullanıcı tarayıcıdan my_domain.com adresine istekte bulunduğunda sunucuda çalışan Docker container’ına yönlendirme yapılacaktır.

Örneğin burada location /api {… şeklinde bir yol izleseydik my_domain.com/api adresine gelen istekleri Docker container’ına yönlendirmiş olacaktık.

İşlemleri gerçekleştirdikten sonra dosyayı kaydettiğinizden emin olun ve konfigürasyon dosyasının hatasız olup olmadığını kontrol etmek için linux terminalinde aşağıdaki komutu çalıştırın.

Yukarıdaki komutun çıktısı aşağıdaki gibi ise her şey yolunda demektir:

Konfigürasyon dosyamızın hatasız olduğundan emin olduktan sonra yaptığımız değişikliklerin geçerli olması için nginx servisini yeniden başlatmamız gerekiyor. Bunu aşağıdaki linux komutu ile gerçekleştirebiliriz.

Bu koddan herhangi bir çıktı beklemiyoruz. Yeniden başlatma sırasında bir hata çıkarsa tek çıktı o olacaktır. Son olarak NGINX servisinin durumunu sorgulamak için aşağıdaki komutu kullanabiliriz.

Bu komutun çıktısında Active: active (running) satırı yer alıyorsa tüm işlemler başarılı bir şekilde gerçekleşmiş demektir. Bununla birlikte reverse proxy işlemimizi tamamlamış olduk ve alan adına atılan istekler konfigürasyon dosyası içerisinde tanımladığımız 8081 portuna yönlendirilecektir. Daha detaylı bilgi için NGINX Resmi Dokümanlarını inceleyebilirsiniz.

Bu makalede web sunucusunun ne olduğuna, bir web sunucusu olan NGINX’e neden ihtiyacımız olduğuna, bize ne gibi avantajlar sağladığına, Ubuntu sunucu ve Docker container olmak üzere 2 farklı ortama kurulum aşamalarına ve temel olarak bir örnek üzerinden kullanımının nasıl olduğuna değindim. Faydalı olması dileği ile.

1 Response

  1. Yafeshan says:

    Bu fayda dolu içerik için teşekkürler.

Leave a Reply

Your email address will not be published. Required fields are marked *