Merhaba arkadaşlar, bugün sizlere sunucu yönetiminin bel kemiği diyebileceğimiz Nginx'in yapılandırma dosyasını, yani nginx.conf'u nasıl anlayacağımızı adım adım anlatacağım. Özellikle yeni başlayan sistem yöneticileri bu dosyayı gördüklerinde biraz ürkebiliyor, ama aslında mantığını kavradıktan sonra ne kadar esnek ve güçlü olduğunu göreceksiniz. Bu rehberle, artık kendi ihtiyaçlarınıza göre ayarları rahatça yapılandırabileceksiniz.
Nginx.conf Nedir ve Nerede Bulunur?
Nginx'in kalbi, tüm ana ayarların yapıldığı bu dosyadır. Nginx servisi her başlatıldığında ilk olarak bu dosyayı okur ve ona göre çalışır. Benim sunucularda genelde varsayılan yolu /etc/nginx/nginx.conf şeklindedir. Tabii kuruluma göre değişiklik gösterebilir. Dosyanın nerede olduğunu öğrenmek için şu komutu kullanabilirsiniz:
Bu komut, test ederken kullandığı ana konfigürasyon dosyasının yolunu gösterecektir.
Temel Yapı (Context'ler - Bağlamlar)
Nginx.conf dosyası, iç içe geçmiş bloklardan (context'lerden) oluşur. Şu ayara çok dikkat etmelisiniz, her direktif kendine uygun olan blok içinde yazılmalıdır. Ana bloklar şunlardır:
Gördüğünüz gibi, main -> events -> http -> server -> location şeklinde hiyerarşik bir yapı var. Bu mantığı anlamak, konfigürasyonu okumayı ve yazmayı inanılmaz kolaylaştırır.
Kritik Ana (Main) ve Events Direktifleri
Bu direktifler, Nginx'in sistem kaynaklarını nasıl kullanacağını belirler ve performansı doğrudan etkiler.
Dikkat Edilmesi Gerekenler
Herhangi bir değişiklik yaptıktan sonra, dosyayı kaydetmeden önce MUTLAKA test edin! Aksi halde Nginx servisi yeniden başlamayabilir ve siteniz offline kalabilir. Test için şu komutu kullanıyorum:
Eğer "test is successful" mesajını görürseniz, değişiklikleri aktif hale getirebilirsiniz:
Kesinlikle systemctl restart nginx yerine reload kullanın. Reload, mevcut bağlantıları kesmeden yeni konfigürasyonu yükler, restart ise anlık bir kesintiye neden olur.
Örnek Bir Optimizasyon Bloğu
Benim temel sunucularımda HTTP bağlamının en üstüne genelde bu tür optimizasyonları eklerim. Siz de kendi ihtiyaçlarınıza göre uyarlayabilirsiniz:
Umarım bu rehber, Nginx konfigürasyon dosyasının gizemini biraz olsun ortadan kaldırmıştır. Unutmayın, en iyi öğrenme yöntemi, bir test sunucusu kurup bu ayarlarla oynamak ve sonuçlarını gözlemlemektir.
Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Özellikle yüksek trafikli ortamlar için eklediğiniz özel direktifler var mı? Tecrübelerinizi paylaşırsanız hepimiz faydalanırız. Sorusu olan arkadaşlar aşağıya yazsın, elimden geldiğince yardımcı olmaya çalışırım.
Nginx'in kalbi, tüm ana ayarların yapıldığı bu dosyadır. Nginx servisi her başlatıldığında ilk olarak bu dosyayı okur ve ona göre çalışır. Benim sunucularda genelde varsayılan yolu /etc/nginx/nginx.conf şeklindedir. Tabii kuruluma göre değişiklik gösterebilir. Dosyanın nerede olduğunu öğrenmek için şu komutu kullanabilirsiniz:
Bash:
nginx -t 2>&1 | grep nginx.conf
Bu komut, test ederken kullandığı ana konfigürasyon dosyasının yolunu gösterecektir.
Nginx.conf dosyası, iç içe geçmiş bloklardan (context'lerden) oluşur. Şu ayara çok dikkat etmelisiniz, her direktif kendine uygun olan blok içinde yazılmalıdır. Ana bloklar şunlardır:
NGINX:
# Ana (Main) Bağlam: En dıştaki bölüm. Kullanıcı, çalışan proses sayısı gibi genel ayarlar burada yapılır.
user www-data;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;
# Events Bağlamı: Bağlantı işleme ile ilgili ayarlar.
events {
worker_connections 768;
# multi_accept on;
}
# HTTP Bağlamı: Tüm HTTP/HTTPS ile ilgili ayarların merkezi. En çok uğrayacağınız yer burası.
http {
# Temel ayarlar, MIME tipleri, log formatı gibi şeyler buraya yazılır.
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Sunucu (Server) Bağlamı: Sanal sunucu (virtual host) tanımlamak için kullanılır.
server {
listen 80;
server_name bingunluk.com;
# Lokasyon (Location) Bağlamı: Belirli bir URL deseni için kurallar yazılır.
location / {
root /var/www/html;
index index.html;
}
}
}
Gördüğünüz gibi, main -> events -> http -> server -> location şeklinde hiyerarşik bir yapı var. Bu mantığı anlamak, konfigürasyonu okumayı ve yazmayı inanılmaz kolaylaştırır.
Bu direktifler, Nginx'in sistem kaynaklarını nasıl kullanacağını belirler ve performansı doğrudan etkiler.
NGINX:
user nginx; # Nginx proseslerinin hangi kullanıcı/grup ile çalışacağı. Güvenlik için önemli.
worker_processes auto; # Çalışan işçi proses sayısı. 'auto' genelde iyi bir seçimdir, CPU çekirdek sayısına göre ayarlar.
worker_rlimit_nofile 65535; # Bir işçi prosesin açabileceği maksimum dosya tanımlayıcı sayısı. Yüksek trafikte artırın.
events {
worker_connections 4096; # Bir işçi prosesin aynı anda yönetebileceği maksimum bağlantı sayısı.
multi_accept on; # Bir seferde tüm yeni bağlantıları kabul et. Performans için açılabilir.
use epoll; # Linux'ta yüksek performanslı bağlantı yöntemi. Genelde otomatik seçilir.
}
Herhangi bir değişiklik yaptıktan sonra, dosyayı kaydetmeden önce MUTLAKA test edin! Aksi halde Nginx servisi yeniden başlamayabilir ve siteniz offline kalabilir. Test için şu komutu kullanıyorum:
Bash:
sudo nginx -t
Eğer "test is successful" mesajını görürseniz, değişiklikleri aktif hale getirebilirsiniz:
Bash:
sudo systemctl reload nginx # Veya: sudo nginx -s reload
Kesinlikle systemctl restart nginx yerine reload kullanın. Reload, mevcut bağlantıları kesmeden yeni konfigürasyonu yükler, restart ise anlık bir kesintiye neden olur.
Benim temel sunucularımda HTTP bağlamının en üstüne genelde bu tür optimizasyonları eklerim. Siz de kendi ihtiyaçlarınıza göre uyarlayabilirsiniz:
NGINX:
http {
# Temel Performans
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 64M; # Yükleyeceğiniz maksimum dosya boyutu.
# Gzip Sıkıştırma (Bandwidth tasarrufu için çok önemli)
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml+rss text/javascript;
# Log Formatı (Analiz için faydalı)
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
# Diğer server bloklarını include et (Sanal host'ları ayrı dosyalarda tutmak daha düzenlidir)
include /etc/nginx/conf.d/.conf;
include /etc/nginx/sites-enabled/;
}
Umarım bu rehber, Nginx konfigürasyon dosyasının gizemini biraz olsun ortadan kaldırmıştır. Unutmayın, en iyi öğrenme yöntemi, bir test sunucusu kurup bu ayarlarla oynamak ve sonuçlarını gözlemlemektir.
Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Özellikle yüksek trafikli ortamlar için eklediğiniz özel direktifler var mı? Tecrübelerinizi paylaşırsanız hepimiz faydalanırız. Sorusu olan arkadaşlar aşağıya yazsın, elimden geldiğince yardımcı olmaya çalışırım.