format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightNginx Üzerinde Gelişmiş Hata Yönetimi ve Loglama Nedir?
- arrow_rightNginx Error Log Yapılandırması
- arrow_rightTemel Error Log Direktifleri
- arrow_rightHTTP Durum Kodları ve Anlamları
- arrow_rightNginx Access Log Yapılandırması
- arrow_rightAccess Log Format Tanımlama
- arrow_rightJSON Formatında Loglama
- arrow_rightÖzel Hata Sayfaları Oluşturma
- arrow_rightHata Sayfası Yapılandırması
- arrow_rightBirden Fazla Hata Kodu için Yönlendirme
- arrow_rightLog Rotasyonu ve Yönetimi
- arrow_rightLogrotate Yapılandırması
- arrow_rightManuel Log Temizleme Komutları
- arrow_rightKoşullu Loglama ve Filtreleme
- arrow_rightİp Adresine Göre Filtreleme
- arrow_rightDurum Koduna Göre Loglama
- arrow_rightGüvenlik ve İzleme En İyi Uygulamaları
- arrow_rightDDOS ve Bot Koruma için Loglama
- arrow_rightBirlikte Kullanılan Araçlar
- arrow_rightSık Yapılan Hatalar ve Çözümleri
- arrow_rightLog Dosyalarının Büyümesi
- arrow_rightEksik Log İzni
- arrow_rightHata Kodu Yönlendirme Sorunları
- arrow_rightSonuç ve Öneriler
Nginx Üzerinde Gelişmiş Hata Yönetimi ve Loglama Nedir?
Nginx, dünya genelinde en popüler web sunucularından biri olarak milyonlarca web sitesine hizmet vermektedir. Gelişmiş hata yönetimi ve loglama, Nginx'in güvenilir ve performanslı çalışmasının temel taşlarından biridir. Doğru yapılandırılmış bir log sistemi, Nginx virtual host yapılandırması ile birlikte sunucu performansını izlemek, güvenlik tehditlerini tespit etmek ve hata kaynaklarını hızlıca belirlemek için kritik öneme sahiptir.
Araştırmalara göre, web sunucularının %40'ından fazlası Nginx kullanmaktadır ve bu oran her yıl artış göstermektedir. Etkili log yönetimi olmadan, sunucu sorunlarını tespit etmek neredeyse imkansız hale gelir.
Nginx Error Log Yapılandırması
Nginx hata logları, sunucu çalışması sırasında oluşan tüm hataları, uyarıları ve kritik olayları kaydeder. Bu loglar, sorun giderme sürecinin ilk adımıdır.
Temel Error Log Direktifleri
Error log yapılandırması için kullanılan temel direktiflere bakalım:
error_log /var/log/nginx/error.log warn; error_log /var/log/nginx/error.log notice; error_log /var/log/nginx/error.log error; error_log /var/log/nginx/error.log crit; error_log /var/log/nginx/error.log alert; error_log /var/log/nginx/error.log emerg;
Log seviyeleri, öncelik sırasına göre düzenlenmiştir. En düşük seviye debug, en yüksek seviye ise emerg'dir. Üretim ortamlarında genellikle warn veya error seviyesi tercih edilir.
HTTP Durum Kodları ve Anlamları
Nginx'in ürettiği hata kodlarını anlamak, hata yönetiminin temelidir:
| Durum Kodu | Anlamı | Çözüm Önerisi |
|---|---|---|
| 400 | Bad Request - Geçersiz istek | İstek formatını kontrol edin |
| 401 | Unauthorized - Yetkisiz erişim | Kimlik doğrulama ayarlarını gözden geçirin |
| 403 | Forbidden - Erişim engellendi | Dosya izinlerini kontrol edin |
| 404 | Not Found - Dosya bulunamadı | Dosya yolunu doğrulayın |
| 500 | Internal Server Error - Sunucu hatası | Sunucu konfigürasyonunu inceleyin |
| 502 | Bad Gateway | Arka uç servislerini kontrol edin |
| 503 | Service Unavailable | Sunucu kaynaklarını artırın |
Nginx Access Log Yapılandırması
Access log, her HTTP isteğinin detaylı kaydını tutar. Bu loglar, trafik analizi, güvenlik izleme ve performans optimizasyonu için vazgeçilmezdir.
Access Log Format Tanımlama
Özel log formatları oluşturmak için log_format direktifi kullanılır:
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time';
access_log /var/log/nginx/access.log main;
JSON Formatında Loglama
Modern log yönetim sistemleri için JSON formatı idealdir:
log_format json_combined escape=json
'{'
'"time_local":"$time_local",'
'"remote_addr":"$remote_addr",'
'"remote_user":"$remote_user",'
'"request":"$request",'
'"status": "$status",'
'"body_bytes_sent":"$body_bytes_sent",'
'"request_time":"$request_time",'
'"http_referer":"$http_referer",'
'"http_user_agent":"$http_user_agent"'
'}';
access_log /var/log/nginx/access.json json_combined;
Özel Hata Sayfaları Oluşturma
Kullanıcı deneyimini iyileştirmek ve profesyonel bir görünüm için özel hata sayfaları oluşturulmalıdır.
Hata Sayfası Yapılandırması
server {
listen 80;
server_name example.com;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /404.html {
internal;
root /var/www/html;
}
location = /50x.html {
internal;
root /var/www/html;
}
}
Birden Fazla Hata Kodu için Yönlendirme
error_page 403 404 500 502 503 504 /error.html;
location = /error.html {
root /var/www/html;
internal;
}
Log Rotasyonu ve Yönetimi
Log dosyaları zamanla büyük boyutlara ulaşabilir. Logrotate kullanarak otomatik rotasyon yapılandırmak önemlidir.
Logrotate Yapılandırması
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
Bu yapılandırma, logları günlük olarak döndürür, 14 günlük geçmişi saklar ve eski logları sıkıştırır.
Manuel Log Temizleme Komutları
# Belirli bir boyutun üzerindeki logları temizle truncate -s 0 /var/log/nginx/error.log # 7 günden eski logları sil find /var/log/nginx -name "*.log" -mtime +7 -delete # Log dosyasını sıfırla > /var/log/nginx/access.log
Koşullu Loglama ve Filtreleme
Bazı isteklerin loglanmasını engellemek veya farklı log dosyalarına yönlendirmek için koşullu loglama kullanılabilir.
İp Adresine Göre Filtreleme
map $remote_addr $loggable {
~^192\.168\.1\.100 0;
~^10\.0\.0\.50 0;
default 1;
}
access_log /var/log/nginx/access.log combined if=$loggable;
Durum Koduna Göre Loglama
map $status $log_status {
~^2\d\d 1;
~^3\d\d 1;
default 0;
}
access_log /var/log/nginx/success.log combined if=$log_status;
Güvenlik ve İzleme En İyi Uygulamaları
Sunucu güvenliği için gelişmiş loglama teknikleri uygulamak kritik öneme sahiptir.
DDOS ve Bot Koruma için Loglama
Nginx rate limiting ile birlikte gelişmiş loglama, saldırıları tespit etmek için kullanılır:
http {
log_format attack '$remote_addr - $remote_user [$time_local] '
'$request $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'Rate: $limit_req_status';
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
limit_req_log_level warn;
server {
location / {
limit_req zone=req_limit burst=20 nodelay;
access_log /var/log/nginx/attack.log attack;
}
}
}
Birlikte Kullanılan Araçlar
| Araç | Kullanım Amacı | Özellik |
|---|---|---|
| ELK Stack | Log analizi | Görselleştirme, arama |
| Graylog | Merkezi log yönetimi | Uyarı sistemi |
| Fluentd | Log toplama | Gerçek zamanlı işleme |
| GoAccess | Terminal tabanlı analiz | Hızlı görünüm |
Sık Yapılan Hatalar ve Çözümleri
Log Dosyalarının Büyümesi
Log dosyalarının diski doldurmasını önlemek için:
- Logrotate yapılandırmasını etkinleştirin
- Uygunsuz istekleri filtreleyin
- Debug modunu üretimde kapatın
- Log seviyesini uygun şekilde ayarlayın
Eksik Log İzni
# Nginx'in log yazma izinlerini kontrol edin ls -la /var/log/nginx/ # İzinleri düzeltin chown -R www-data:www-data /var/log/nginx chmod 755 /var/log/nginx
Hata Kodu Yönlendirme Sorunları
Özel hata sayfalarının çalışmaması durumunda, 301 ve 302 yönlendirme kurallarını kontrol edin ve doğru yapılandırıldığından emin olun.
Sonuç ve Öneriler
Nginx hata yönetimi ve loglama, sunucu güvenilirliği ve performansı için temel bileşenlerdir. Doğru yapılandırılmış bir log sistemi, bulut sunucu altyapınızda sorunları hızlıca tespit etmenizi ve çözmenizi sağlar.
Özetle, etkili bir Nginx loglama stratejisi için: uygun log seviyesi seçimi, otomatik log rotasyonu, özel hata sayfaları oluşturma, koşullu loglama ve merkezi log yönetim araçlarının kullanılması önerilir. Bu uygulamalar, sunucu altyapınızın sağlığını izlemek ve olası sorunları önceden tespit etmek için kritik öneme sahiptir.