Nginx Web Server Nedir? Kurulum, Yapılandırma ve En İyi Uygulamalara Yönelik Tam Rehber
Nginx (telaffuzu “engine-x”) internet üzerinde en yaygın şekilde 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 görevi görmesine kadar, Nginx hafif ve verimli bir pakette olağanüstü performans, ölçeklenebilirlik ve güvenlik sağlar.
Bu kapsamlı kılavuzda, Nginx’in tam olarak ne olduğunu, mimarisinin 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, kullanıcılara internet üzerinden web sayfaları ve uygulama içeriği 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şleme) çö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 gelen her istek için yeni bir thread veya process oluşturmak yerine, Nginx az sayıda worker process 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 veya yüksek kullanılabilirlik uygulama yığınını bir Dedicated Server üzerinde yönetiyor olsanız, ideal bir seçim haline getirir.
Nginx’in Temel Özellikleri
⚡ Yüksek Performans
Nginx, statik içerik — HTML dosyaları, CSS stil sayfaları, JavaScript paketleri, resimler ve video — sunmada olağanüstü derecede verimlidir ve çok düşük kaynak tüketimi ile çalışır. 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ç sunucu 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 alı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ı önemli ölçüde azaltır ve son kullanıcılara içerik sunumunu hızlandırır.
Nginx Nasıl Çalışır? Mimariye Anlamak
Nginx neden bu kadar iyi performans gösterdiğini takdir etmek için, iç modelini anlamak yardımcı olur.
Olay Tabanlı, 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ığı modelini 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çeklenmiyor.
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şlemi (disk okuma veya upstream yanıtı gibi) beklerken, boşta 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’in Yaygın Kullanım Alanları
| Kullanım Alanı | Açıklama |
|---|---|
| Web Sunucusu | Statik ve dinamik web sitelerini yüksek hız ve güvenilirlikle sunma |
| Ters Proxy | İstekleri arka uç uygulama sunucularına yönlendirme, güvenlik ve performansı iyileştirme |
| Yük Dengeleyici | Trafiği sunucu havuzları arasında dağıtma, yüksek kullanılabilirlik sağlama |
| API Ağ Geçidi | API trafiğini yönetme, yönlendirme ve mikro hizmetlere kısıtlama uygulama |
| Medya Akışı | Video ve ses içeriğini verimli şekilde akışla sunma |
| SSL Sonlandırma | HTTPS şifrelemesini işleme ve istekleri arka uç sunuculara iletme |
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 tabanlı, asenkron | İşlem/thread tabanlı |
| Statik İçerik | Son derece hızlı | Orta düzey |
| 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 kullanımı |
| 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 Alanı | Yüksek trafikli siteler, proxy, API’ler | Paylaşılan hosting, eski uygulamalar |
Sonuç: Yüksek trafikli web siteleri, ters proxy kurulumları ve modern uygulama yığınları için Nginx genellikle daha iyi bir seçimdir. Apache, .htaccess dosyalarına veya belirli Apache modüllerine büyük ölçüde bağlı ortamlarda popüler olmaya devam etmektedir.
Nginx’in gücünü kullanıcı dostu bir yönetim arayüzüyle istiyorsanız, cPanel ile VPS seçmeyi veya AlexHost’un barındırma çözümleriyle sunulan VPS Kontrol Panelleri‘nin tam aralığını keşfetmeyi düşünün.
Linux’te Nginx Nasıl Kurulur ve Yapılandırılır
Linux sunucusunda Nginx’in tam ve pratik bir kurulumunu adım adım gerçekleştirelim.
Ö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’i Kurun
Ubuntu / Debian’da:
sudo apt update
sudo apt install nginx -yCentOS / RHEL’de:
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şlaması için 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 şekilde 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ı (worker işlemleri, günlüğe kaydetme, MIME türleri) tanımlarken, bireysel server blokları (Nginx’in Apache’nin Sanal Konakları’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öz dizimi 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 zorunludur. Ü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, Nginx sunucu bloğunuzu otomatik olarak HTTPS’i işlemek ve otomatik sertifika yenilemeyi ayarlamak için 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.
Nginx Yaygın Senaryolar İçin Yapılandırması
Ters Proxy Yapılandırması
İstekleri port 3000’de çalışan bir Node.js uygulamasına ilet:
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:
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
Bir PHP uygulamasını (örn. 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üvence altına almak, onu doğru şekilde yapılandırmak kadar önemlidir. Bu sertleştirme adımlarını izleyin:
1. Nginx Sürüm Bilgisini Gizle
Sunucu sürümünüzü açığa çıkarmak, saldırganların bilinen güvenlik açıklarını hedeflemesine yardımcı olur. Bunu devre dışı bırakın:
# In the http block of nginx.conf
server_tokens off;2. Güçlü Şifre Paketleri ile SSL/TLS’yi Etkinleştir
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ı Ekle
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;4. İstek Boyutunu ve Hızını Sınırla
DDoS saldırılarına ve kötüye kullanıma karşı koruma sağla:
# Limit body size (e.g., for file uploads)
client_max_body_size 10M;
# Rate limiting zone
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
# Apply rate limiting to a location
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
}5. IP Beyaz Listesi ile Erişimi Kısıtla
location /admin/ {
allow 203.0.113.0/24; # Your office IP range
deny all;
}6. Gereksiz HTTP Yöntemlerini Devre Dışı Bırak
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 444;
}Performans Optimizasyonu En İyi Uygulamaları
Gzip Sıkıştırmasını Etkinleştirin
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;Tarayıcı Önbelleğini Yapılandırın
location ~* .(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}HTTP/2’yi Etkinleştirin
HTTP/2, multiplexing ve başlık sıkıştırması aracılığıyla sayfa yükleme performansını önemli ölçüde iyileştirir:
listen 443 ssl http2;Worker Süreçlerini Ayarlayın
# In nginx.conf
worker_processes auto; # Match number of CPU cores
worker_connections 1024; # Max connections per worker
use epoll; # Efficient event model on Linux
multi_accept on; # Accept multiple connections at onceNginx İzleme
Bu araçlar ve tekniklerle Nginx sunucunuzun sağlığını kontrol edin:
Nginx Durum Modülünü Etkinleştirin
location /nginx_status {
stub_status on;
allow 127.0.0.1;
deny all;
}Yerel olarak erişin:
curl http://127.0.0.1/nginx_statusYararlı Log Analiz Komutları
# View real-time access logs
sudo tail -f /var/log/nginx/access.log
# Find the top 10 most requested URLs
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
# Find the top 10 IP addresses by request count
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10Nginx için Doğru Hosting Seçimi
Nginx, adanmış kaynaklar ve yapılandırmayı ayarlamak için tam root erişimine sahip olduğunda en iyi performansı gösterir. İşte hosting ortamınızı ihtiyaçlarınızla eşleştirmek için hızlı bir kılavuz:
| Senaryo | Önerilen Hosting |
|---|---|
| Kişisel blog veya küçük web sitesi | Paylaşımlı Web Hosting |
| Büyüyen işletme sitesi veya uygulaması | VPS Hosting |
| Yüksek trafikli platform veya kurumsal uygulama | Dedicated Servers |
| Nginx proxy’si ile AI/ML iş yükleri | GPU Hosting |
AlexHost’un VPS Hosting planları ile tam root erişim, SSD destekli depolama ve Nginx’i uygulamanızın talep ettiği şekilde kurma ve yapılandırma esnekliği elde edersiniz — trafiğiniz arttıkça ölçeklendirmek için performans kapasitesi ile.
Nginx Hakkında Sık Sorulan Sorular
S: Nginx ücretsiz mi?
Evet. Nginx açık kaynaklı ve BSD benzeri lisans altında mevcuttur. Ticari bir sürüm olan Nginx Plus, ek kurumsal özellikler ve resmi destek sunmaktadır.
S: Nginx ve Apache aynı sunucuda çalışabilir mi?
Evet. Yaygın bir mimari, Nginx’i 80/443 portunda ters proxy olarak kullanır ve istekleri dahili bir portta (örneğin 8080) çalışan Apache’ye iletir.
S: Nginx ile Nginx Plus arasındaki fark nedir?
Nginx (açık kaynak) kullanım durumlarının büyük çoğunluğunu kapsar. Nginx Plus, aktif sağlık kontrolleri, canlı aktivite izleme panosu, JWT kimlik doğrulaması ve ticari destek gibi özellikler ekler.
S: Nginx’i kapalı kalma süresi olmadan nasıl yeniden yüklerim?
sudo nginx -s reload veya sudo systemctl reload nginx kullanın. Bu, yapılandırmayı zarif bir şekilde yeniden yükler ve etkin bağlantıları kesmez.
S: Nginx Windows’u destekliyor mu?
Evet, ancak Windows sürümünün sınırlamaları vardır ve üretim kullanımı için önerilmez. Linux, Nginx için standart üretim ortamıdır.
Sonuç
Nginx sadece bir web sunucusundan çok daha fazlasıdır — içerik sunmak, istekleri yönlendirmek, yükü dengelemek, uygulamaları güvenli hale getirmek ve API trafiğini yönetmek için eksiksiz, yüksek performanslı bir platformdur. Olay tabanlı mimarisi, onu modern web altyapısının taleplerinin karşılanması için benzersiz şekilde uygun hale getirir; burada binlerce eşzamanlı bağlantıyı verimli bir şekilde işlemek bir lüks değil, temel bir gereksinimdir.
Basit bir statik site, PHP tabanlı bir CMS, bir Node.js API’si veya karmaşık bir mikro hizmetler mimarisi dağıtıyor olsanız da, Nginx hedeflerinizi desteklemek için hız, esneklik ve güvenlik özellikleri sağlar.
Bunu doğru hosting altyapısı ile eşleştirin — giriş seviyesi projeler için Paylaşımlı Web Hosting‘ten kurumsal iş yükleri için tam yönetilen Dedicated Sunucular‘a kadar — ve performans ve büyüme için inşa edilmiş bir temel elde edersiniz.
tasarruf edin