Nginx Web Server Nedir? Kurulum, Yapılandırma ve En İyi Uygulamalara Yönelik Tam Rehber
Nginx (pronounced "engine-x"), internet üzerinde en yaygın olarak dağıtılan web sunucularından biri haline gelmiştir — ve bunun iyi nedenleri vardır. Yüksek trafikli e-ticaret platformlarını güçlendirmekten karmaşık mikro hizmet mimarilerine ters proxy olarak hareket etmeye kadar, Nginx hafif ve verimli bir pakette olağanüstü performans, ölçeklenebilirlik ve güvenlik sunar.
Bu kapsamlı kılavuzda, Nginx'in tam olarak ne olduğunu, mimarisi nasıl çalıştığını, Apache ile nasıl karşılaştırıldığını ve kendi sunucunuzda nasıl çalıştırılacağını — güvenlik ve performans en iyi uygulamaları da dahil olmak üzere — ayrıntılı olarak açıklayacağız.
Nginx Nedir?
Nginx, web sayfalarını ve uygulama içeriğini internet üzerinden kullanıcılara sunan ücretsiz, açık kaynaklı bir web sunucusu yazılımıdır. 2004 yılında Igor Sysoev tarafından "C10K problemi"ni (10.000 eşzamanlı bağlantıyı işlemek) çözmek için yayınlanan Nginx, o zamandan beri dünya çapında milyonlarca web sitesi tarafından kullanılan tam özellikli bir platforma dönüşmüştür.
Nginx'i geleneksel web sunucularından ayıran şey, olay odaklı, asenkron, engellemeyen mimarisidir. Eski sunucuların yaptığı gibi her gelen istek için yeni bir iş parçacığı veya işlem oluşturmak yerine, Nginx az sayıda çalışan işlemi kullanarak binlerce eşzamanlı bağlantıyı minimum bellek ve CPU yükü ile işler.
Bu, Nginx'i basit bir statik web sitesini Paylaşımlı Web Hosting üzerinde çalıştırıyor olsanız da, yüksek kullanılabilirlik uygulaması yığınını Dedicated Server üzerinde yönetiyor olsanız da ideal bir seçim haline getirir.
Nginx'in Temel Özellikleri
⚡ Yüksek Performans
Nginx, statik içeriği — HTML dosyaları, CSS stil sayfaları, JavaScript paketleri, resimler ve video — çok düşük kaynak tüketimi ile sunmada istisnai derecede verimlidir. Ağır yük altında bile hızlı yanıt sürelerini korur.
⚖️ Yük Dengeleme
Nginx, gelen trafiği birden fazla arka uç sunucusu arasında çeşitli algoritmalar (round-robin, en az bağlantı, IP hash) kullanarak dağıtabilir, kaynak kullanımını optimize eder ve tek hata noktalarını ortadan kaldırır.
🔁 Ters Proxy
Ters proxy olarak Nginx, arka uç uygulama sunucularınızın önünde yer alır, istemci isteklerini iletirken bu sunucuları doğrudan internet maruziyetinden korur. Bu, kritik bir güvenlik ve kontrol katmanı ekler.
🔒 SSL/TLS Sonlandırması
Nginx, SSL/TLS şifrelemesini yerel olarak işler, şifrelemenin hesaplama yükünü uygulama sunucularınızdan boşaltır. Nginx'i güvenilir bir SSL Sertifikası ile eşleştirmek, aktarımdaki tüm verilerin şifrelenmiş olmasını ve sitenizin kullanıcıların ve arama motorlarının beklediği güven sinyallerini kazanmasını sağlar.
🌐 Geniş Uygulama Uyumluluğu
Nginx, PHP (PHP-FPM aracılığıyla), Python (Django, Flask), Ruby on Rails, Node.js ve Go dahil olmak üzere modern programlama dilleri ve çerçeveleriyle sorunsuz bir şekilde entegre olur.
🗜️ Gzip Sıkıştırması ve Önbelleğe Alma
Gzip sıkıştırması ve yanıt önbelleğe alma için yerleşik destek, bant genişliği kullanımını dramatik olarak azaltır ve son kullanıcılara içerik teslimini hızlandırır.
Nginx Nasıl Çalışır? Mimariyı Anlamak
Nginx'in neden bu kadar iyi performans gösterdiğini takdir etmek için iç modelini anlamak yardımcı olur.
Olay Odaklı, Engellemeyen I/O
Apache'nin eski sürümleri gibi geleneksel web sunucuları, bağlantı başına işlem veya bağlantı başına iş parçacığı modeli kullanır. Her yeni istek yeni bir işlem veya iş parçacığı oluşturur, bu da bellek ve CPU tüketir. Yüksek eşzamanlılık altında, bu yaklaşım iyi ölçeklenmez.
Nginx temelden farklı bir yaklaşım benimser:
- Tek bir ana işlem yapılandırmayı okur ve çalışan işlemleri yönetir.
- Birden fazla çalışan işlem (tipik olarak CPU çekirdeği başına bir tane) engellemeyen I/O ve bir olay döngüsü kullanarak binlerce bağlantıyı işler.
- Bir çalışan yavaş bir işlem (disk okuma veya arka uç yanıtı gibi) beklediğinde, boş oturmaz — kuyrukta diğer olayları işler.
Bu mimari, tek bir Nginx örneğinin onbinlerce eşzamanlı bağlantıyı işlemesine izin verirken, iş parçacığı tabanlı bir sunucunun gerektireceği belleğin bir kısmını tüketir.
İstek İşleme Akışı
Client Request
↓
Nginx (Master Process)
↓
Worker Process (Event Loop)
↓
Static File? → Serve directly from disk
↓
Dynamic Content? → Forward to upstream (PHP-FPM, Node.js, etc.)
↓
Response returned to clientNginx için Yaygın Kullanım Durumları
| Kullanım Durumu | Açıklama |
|---|---|
| Web Sunucusu | Statik ve dinamik web sitelerini yüksek hız ve güvenilirlikle sunun |
| Ters Proxy | İstekleri arka uç uygulama sunucularına yönlendirin, güvenlik ve performansı iyileştirin |
| Yük Dengeleyici | Trafiği sunucu havuzları arasında dağıtın, yüksek kullanılabilirlik için |
| API Ağ Geçidi | API trafiğini mikro hizmetlere yönetin, yönlendirin ve kısıtlayın |
| Medya Akışı | Video ve ses içeriğini verimli bir şekilde akışla aktarın |
| SSL Sonlandırması | HTTPS şifrelemesini işleyin, istekleri arka uç sunucularına geçirmeden önce |
Nginx vs. Apache: Hangisini Seçmelisiniz?
Hem Nginx hem de Apache üretim sınıfı web sunucularıdır, ancak farklı senaryolara uyarlar. İşte doğrudan bir karşılaştırma:
| Özellik | Nginx | Apache |
|---|---|---|
| Mimari | Olay odaklı, asenkron | İşlem/iş parçacığı odaklı |
| Statik İçerik | İstisnai derecede hızlı | Orta |
| Dinamik İçerik | Harici işlemciler aracılığıyla (PHP-FPM) | Modüller aracılığıyla yerel (mod_php) |
| Eşzamanlılık | Mükemmel (binlerce bağlantı) | İyi, ancak daha ağır kaynak |
| Yapılandırma | Merkezi, temiz sözdizimi | Dağıtılmış (.htaccess desteği) |
| Modül Ekosistemi | Büyüyen, derlenmiş | Kapsamlı, dinamik olarak yüklenebilir |
| Bellek Kullanımı | Düşük | Yük altında daha yüksek |
| En İyi Kullanım | Yüksek trafikli siteler, proxy, API'ler | Paylaşımlı hosting, eski uygulamalar |
Sonuç: Yüksek trafikli web siteleri, ters proxy kurulumları ve modern uygulama yığınları için Nginx tipik olarak üstün seçimdir. Apache, .htaccess dosyalarına veya belirli Apache modüllerine yoğun şekilde bağlı ortamlarda popüler olmaya devam etmektedir.
Nginx'in gücünü kullanıcı dostu bir yönetim arayüzü ile istiyorsanız, cPanel ile VPS düşünün veya AlexHost'un barındırma çözümleriyle sunulan VPS Kontrol Panellerinin tam aralığını keşfedin.
Linux'ta Nginx Nasıl Kurulur ve Yapılandırılır
Linux sunucusunda Nginx'in tam ve pratik bir kurulumunu adım adım açıklayalım.
Ön Koşullar
- Ubuntu, Debian, CentOS veya RHEL çalıştıran bir Linux sunucusu
- Root veya sudo erişimi
- Kayıtlı bir alan adı (AlexHost aracılığıyla alan adı kaydedebilirsiniz)
Adım 1: Nginx Kurun
Ubuntu / Debian üzerinde:
sudo apt update
sudo apt install nginx -yCentOS / RHEL üzerinde:
sudo yum install epel-release -y
sudo yum install nginx -yAdım 2: Nginx'i Başlatın ve Etkinleştirin
Hizmeti başlatın ve sistem önyüklemesinde otomatik olarak başlatılacak şekilde yapılandırın:
sudo systemctl start nginx
sudo systemctl enable nginxÇalışıp çalışmadığını doğrulayın:
sudo systemctl status nginxÇıktıda active (running) görmelisiniz. Ayrıca sunucunuzun IP adresini bir tarayıcıda açabilirsiniz — varsayılan Nginx hoş geldiniz sayfasını göreceksiniz.
Adım 3: Güvenlik Duvarını Yapılandırın
HTTP ve HTTPS trafiğine güvenlik duvarınız aracılığıyla izin verin:
UFW (Ubuntu/Debian):
sudo ufw allow 'Nginx Full'
sudo ufw reloadFirewalld (CentOS/RHEL):
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reloadAdım 4: Nginx Yapılandırma Yapısını Anlayın
Nginx'in yapılandırması aşağıdaki gibi organize edilmiştir:
/etc/nginx/
├── nginx.conf ← Main configuration file
├── sites-available/ ← Virtual host config files (inactive)
│ └── example.com
├── sites-enabled/ ← Symlinks to active virtual hosts
│ └── example.com → ../sites-available/example.com
├── conf.d/ ← Additional configuration snippets
└── snippets/ ← Reusable config fragmentsAna nginx.conf dosyası genel ayarları (çalışan işlemleri, günlüğü, MIME türleri) tanımlarken, bireysel sunucu blokları (Nginx'in Apache'nin Sanal Hostlarına eşdeğeri) her alan adı veya uygulamanın nasıl işlendiğini tanımlar.
Adım 5: Alan Adınız İçin Bir Sunucu Bloğu Oluşturun
Web siteniz için yeni bir yapılandırma dosyası oluşturun:
sudo nano /etc/nginx/sites-available/example.comAşağıdaki yapılandırmayı yapıştırın (example.com yerine gerçek alan adınızı yazın):
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm index.php;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}Sembolik bir bağlantı oluşturarak siteyi etkinleştirin:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/Sözdizimi hataları için yapılandırmayı test edin:
sudo nginx -tDeğişiklikleri uygulamak için Nginx'i yeniden yükleyin:
sudo systemctl reload nginxAdım 6: Web Kök Dizininizi Oluşturun
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
echo "<h1>Welcome to example.com</h1>" > /var/www/example.com/html/index.htmlAdım 7: SSL/TLS ile HTTPS'i Etkinleştirin
Sitenizi HTTPS üzerinden sunmak güvenlik, SEO ve kullanıcı güveni için vazgeçilmezdir. Ücretsiz SSL eklemenin en kolay yolu Certbot (Let's Encrypt) aracılığıyladır:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.comCertbot, HTTPS'i işlemek ve otomatik sertifika yenilemeyi ayarlamak için Nginx sunucu bloğunuzu otomatik olarak değiştirecektir.
Üretim ortamları ve e-ticaret siteleri için, genişletilmiş doğrulama ve garanti kapsamı için premium bir SSL Sertifikası düşünün.
Yaygın Senaryolar İçin Nginx Yapılandırması
Ters Proxy Yapılandırması
İstekleri port 3000'de çalışan bir Node.js uygulamasına iletin:
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
}Yük Dengeleme Yapılandırması
Trafiği üç arka uç sunucusu arasında dağıtın:
upstream backend_pool {
least_conn; # Use least-connections algorithm
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_pool;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}PHP-FPM Entegrasyonu
PHP uygulaması (örneğin WordPress) sunun:
server {
listen 80;
server_name example.com;
root /var/www/example.com/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
location ~ /.ht {
deny all;
}
}Nginx için Güvenlik En İyi Uygulamaları
Nginx kurulumunuzu güvenli hale getirmek, onu doğru şekilde yapılandırmak kadar önemlidir. Bu sertleştirme adımlarını izleyin:
1. Nginx Sürüm Bilgisini Gizleyin
Sunucu sürümünüzü açığa çıkarmak, saldırganların bilinen güvenlik açıklarını hedeflemesine yardımcı olur. Devre dışı bırakın:
# In the http block of nginx.conf
server_tokens off;2. Güçlü Şifre Paketleriyle SSL/TLS'i Etkinleştirin
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;3. Güvenlik Başlıkları Ekleyin
###PPT_NO
