# Nginx Nedir?

**Nginx**, açık kaynak kodlu ve yüksek performanslı bir web sunucu yazılımıdır. İlk olarak *mail.ru* için *Igor Sysoev* tarafından mail sunucusu olarak yazılmıştır. Fakat gösterdiği başarı ile şu işlemler içinde kullanılabilir hale gelmiştir:

* HTTP, TCP ve UDP web sunucusu
* Proxy sunucusu
* Reverse proxy (ters vekil sunucusu)
* Load Balancer (HTTP yük dengeleyicisi)
* Mail sunucusu (IMAP, POP3 ve SMTP)

## 1. Neden Nginx Kullanmalıyım?

Nginx kullanmanız için birçok sebep vardır. Bunları şu şekilde sıralayabiliriz.

* Açık kaynak kodlu ve ücretsizdir.
* Konfigürasyonu ve söz dizimi kolaydır
* Dökümantasyonu geniştir ve rahat erişilebilir
* Minimum bellek kullanımı ister
* Sistem gereksinimleri düşüktür
* Yüksek performans sunar
* Yük dengeleme (load balancing)
* Yerine çalışma (failover)

## 2. Nginx Nasıl Çalışır?

Bir istemci, web sayfasını açmak istediğinde istemcinin tarayıcısı web sayfasının sunucusu ile bağlantı oluşturur yani soket açar. İlgili web sayfasının bulunduğu sunucu da bu sayfayı sunucuda bularak istemciye sunar.  Bu olaya **thread** adı verilmektedir.

**Apache** gibi klasik web sunucu yazılımları  **blocking model** adı verilen bir mimariye sahiptir gelen her istek başına bir thread oluşturur. Buna bağlı olarakta her thread için belirli bir bellek ayırır. Fakat bu çalışma şekli c10k ismi verilen bir probleme yol açar.&#x20;

**Nginx** her istek için bir thread oluşturmak yerine **olay-güdümlü, asenkron bir mimarisi (** **Asynchronous Event-Driven Model)** ile bir ana işlem içinde (main process) asenkron çok sayıda işçi işlemler (*worker process*) kullanmaktadır.

**Nginx** her işçi’ye, verilen görevlerin gerçekleşimi ile ilintili bir event handler bağlar. Görev alan işçi işi tamamladıktan sonra bir event fırlatır ve bu event, kendisine bağlı handler tarafından yakalanarak main processe iletilir. Bu sayede, context switch (*blocking model çalışma prensibi*) gibi bir mekanizmaya ihtiyaç kalmaz ve thread sayısı arttıkça artan bekleme süresi ve buna bağlı sistemin geç yanıt vermesi gibi sorunlar ortadan kalkar.

![Nginx Çalışma Şekli](/files/-Lvb4lcjBHE9J68QQBiz)

{% hint style="info" %}
Her **worker process** bir işlemci gücünü temsil eder. Örneğin 8 çekirdekli bir sunucuda 4 worker process ayarlanırsa, her worker process 2 çekirdek kullanır.
{% endhint %}

{% hint style="info" %}
Her **worker connection** bir thread i temsil eder. Bir worker process 1024 adet worker connection barındırabilir. Nginx in gücü buradan gelir.
{% endhint %}

## 3. Nginx vs Apache Kıyaslaması

Nginx sunucu yazılımının gücünü test edebilmemiz için uzun yıllardır kullanılan Apache sunucu yazılımı ile kıyaslayabiliriz.

![4KB lık bir dosyayla yapılan test](/files/-Lvb8taXJ8cSYVZ8rNGU)

Static bir dosya üzerinde yapılan testte Nginx saniyede 26003 işleme cevap verebilirken Apache 12416 işleme cevap verebilmiştir.

!["Hello World" yazılı PHP dosyasıyla yapılan test](/files/-Lvb9FXcOxgleu4oyOcK)

Bir PHP dosyası sunucuda yorumlanarak istemciye gönderilir. Böylece sunucu ile etkileşime geçmiş olunur. "Hello World" yazılı bir PHP dosyası üzerinde yapılan testte Nginx saniyede 10674 işleme cevap verebilirken Apache 9647 işleme cevap verebilmiştir.

![Wordpress ve Cache kurulu test](/files/-Lvb9l47z5Jku6CxGsXS)

Wordpress oldukça ağır bir PHP uygulamasıdır ve cache eklentileri büyük öneme sahiptir. Cache eklentileriyle birlikte kullanılan Wordpress üzerinde yapılan testte Nginx saniyede 9220 işleme cevap verebilirken Apache 2171 işleme cevap verebilmiştir.

## 4. Nginx Kullanan Siteler

Nginx kullanan 43 milyon siteden ([kaynak](https://news.netcraft.com/archives/2019/07/26/july-2019-web-server-survey.html)) başlıcaları şu şekildedir:

1. duckduckgo.com
2. bitbucket.org
3. vk.com
4. blog.csdn.net
5. gitlab.com
6. xvideos.com
7. ahrefs.com
8. pornhub.com
9. app.asana.com&#x20;
10. news.ycombinator.com

## 4. Özet

Nginx, ücretsiz ve oldukça başarılı bir web sunucu yazılımıdır. Üstelik milyonlarca site tarafından kullanılırken popülerliği de sürekli artmaktadır. Öğrenmesi ve kaynak bulması kolay, sunduğu performansı yüksek ve uygulama alanları geniş olması açısından tercih edebilirsiniz.&#x20;

> Nginx ten daha performanslı web sunucu yazılımları mevcuttur. İlerleyen zamanlarda ilgili web sunucu yazılımının derslerini ekleyeceğiz fakat Nginx ile başlamanız daha uygun olacaktır.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://derslik.kerteriz.net/nginx/nginx-nedir.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
