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

Gorkem Ridvan ARIK
GoTurkiye
Published in
4 min readJul 17, 2023

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?
  • 2) NGINX Nedir?
  • 3) Neden NGINX’e İhtiyaç Duyarız?
  • 4) NGINX Nasıl Kurulur?
  • 4.1) Ubuntu’ya NGINX Kurulumu
  • 4.2) Docker Compose ile NGINX Kurulumu
  • 5) Temel NGINX Konfigürasyonları

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?

NGINX’i kurmak için ihtiyaç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

Ubuntu sunucularda genellikle NGINX kurulu bir şekilde gelir. Kurulu değilse aşağıdaki adımları izleyerek hızlıca kurulabilmektedir.

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

sudo apt-get update

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

sudo apt-get install nginx

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.

nginx -v

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

nginx version: nginx/1.18.0 (Ubuntu)

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.

version: '3.8'
services:
nginx:
container_name: webserver
image: nginx:latest
ports:
- "80:80"
volumes:
- ./conf.d:/etc/nginx/conf.d
- ./logs:/var/log/nginx

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 karşılama sayfasını göreceksiniz.

docker compose up

5) Temel NGINX Konfigürasyonları

NGINX kurulumunu sunucuya veya Docker ortamına kurduktan sonra ihtiyacımıza göre konfigüre etme aşamasına geçebiliriz. 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.

server {
listen 80;
server_name localhost; #alan adı

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

location / {
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://127.01.0.1:8081;
}
}

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 sunucnun 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.

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.

--

--