Modern web altyapısı manzarasında Nginx bir dev olarak durur. Başlangıçta C10K sorununu çözmek için oluşturulan Nginx, internetin en büyük web sitelerinin güvendiği yüksek performanslı bir HTTP sunucusu, ters vekil ve yük dengeleyici haline gelmiştir. DevOps mühendisleri ve sistem yöneticileri için Nginx'i ustalıkla kullanmak, bir servisi çalışır durumda tutmaktan öte; verimliliği artırmak, güvenliği sağlamak ve karmaşık yönlendirme mantığını verimli bir şekilde yönetmektir. Bu rehber, temel bilgilerin ötesine geçerek orta ve ileri düzey kullanıcılar için uygulanabilir içgörüler sunan sağlam bir Nginx yapılandırmasının temel bileşenlerine derinlemesine inmektedir.
Yapılandırmanızı Yapılandırma: Dosyalar vs. Bloklar
Yeni başlayanlar için yaygın bir hata, tek parça bir nginx.conf dosyası sürdürmektir. Altyapınız genişledikçe bu durum yönetilemez hale gelir. Önerilen yaklaşım, ana nginx.conf dosyasını minimal ve modüler tutmaktır. Sunucu bloklarını, MIME türlerini ve güvenlik başlıklarını ayrı dosyalara ayırmak için include yönergesini kullanın. Bu sorumluluk ayrımı, hata ayıklamayı kolaylaştırır ve altyapı olarak kod (IaC) için sürüm kontrolünü çok daha temiz hale getirir.
Örneğin, ana yapılandırmanızda sanal ana bilgisayar dosyalarınızı basitçe dahil edebilirsiniz:
# /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Çekirdek günlük kaydı ve performans ayarları
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# Belirli sunucu yapılandırmalarını dahil et
include /etc/nginx/conf.d/*.conf;
}
Sunucu Blokları ve Sanal Ana Bilgisayarlar
Sunucu blokları, Nginx'in tek bir IP adresinde birden fazla web sitesi barındırabilme yeteneğinin temelidir. Her blok, Nginx'in belirli bir etki alanı veya IP için isteklere nasıl yanıt vereceğini tanımlar. İyi yapılandırılmış bir sunucu bloğu, uygun kök dizinleri, dizin dosyalarını ve hata yönetimini içerir.
Ters vekil arkasında çalışan bir Node.js uygulaması için tipik bir kurulumu ele alalım:
server {
listen 80;
server_name example.com www.example.com;
# Tüm HTTP trafiğini HTTPS'e yönlendir
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
root /var/www/html;
index index.html;
location / {
proxy_pass http://localhost:3000;
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_set_header X-Forwarded-Proto $scheme;
}
}
Vekil başlıklarının önemine dikkat edin. Ters vekil olarak hareket ederken Nginx, çoğu HTTP başlığını temizler. X-Real-IP ve X-Forwarded-For geçirmek, arka uç uygulamanızın orijinal istemcinin IP adresini tanımlamasını sağlar; bu da günlük kaydı ve coğrafi hedefleme için hayati önem taşır.
Performans İyileştirme: Önbellekleme ve Sıkıştırma
Nginx'te performans optimizasyonu büyük ölçüde yük boyutunu azaltmak ve arka uca yapılan gidiş-dönüşleri en aza indirmek etrafında döner. HTML, CSS ve JavaScript gibi metin tabanlı içerikler için gzip veya Brotli sıkıştırmayı etkinleştirmek zorunludur. Ayrıca, vekil önbellekleme uygulamak, üst sunuculardaki yükü dramatik şekilde azaltabilir.
# Gzip sıkıştırmayı etkinleştir
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml;
# Bir önbellek bölgesi tanımla
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;
location /api/ {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_pass http://backend_servers;
}
Sonuç
Nginx, doğru yapılandırıldığında statik varlıkları şimşek hızında sunarken dinamik içerik isteklerini akıllıca yönetebilen güçlü bir araçtır. Modüler bir yapılandırma yapısı benimseyerek, güvenli SSL/TLS ayarları uygulayarak ve önbellekleme ve sıkıştırma gibi performans parametrelerini ayarlayarak, dayanıklı ve verimli bir web altyapısı oluşturabilirsiniz. Yeniden yüklemeden önce yapılandırmanızı her zaman nginx -t ile test etmeyi ve herhangi bir anormalliği erken yakalamak için ilk dağıtımlar sırasında günlüklerinizi yakından izlemeyi unutmayın.