Nginx ile Statik Site Yayınlama: Performans Optimizasyonu ve Güvenlik İpuçları
Bu rehberde, Nginx kullanarak statik sitelerinizi nasıl hızlı, güvenli ve ölçeklenebilir şekilde yayınlayabileceğinizi adım adım öğreneceksiniz. Temel yapılandırmadan başlayarak, performans optimizasyonu, SSL sertifikaları, caching ve güvenlik duvarı entegrasyonuna kadar tüm detayları ele alıyoruz.
Caner Serbest
Sistem ve Altyapı
6 dk okuma
Nginx ile Statik Site Yayınlama: Performans Optimizasyonu ve Güvenlik İpuçları
Statik siteler, modern web geliştirmenin temel taşlarından biri haline geldi. Hızlı yüklenme süreleri, düşük sunucu maliyetleri ve güvenlik avantajları sayesinde hem geliştiriciler hem de işletmeler tarafından tercih ediliyor. Bu rehberde, Nginx kullanarak statik sitelerinizi nasıl yayınlayabileceğinizi, performansını nasıl optimize edeceğinizi ve güvenliği nasıl artıracağınızı detaylı bir şekilde inceleyeceğiz.
1. Nginx Nedir ve Neden Statik Siteler İçin İdeal?
Nginx, yüksek performanslı bir web sunucusu ve ters proxy olarak bilinir. Statik siteler için ideal olmasının başlıca nedenleri şunlardır:
- Düşük Bellek Kullanımı: Nginx, Apache gibi diğer web sunucularına kıyasla daha az bellek tüketir.
- Yüksek Eşzamanlılık: Binlerce bağlantıyı aynı anda yönetebilir.
- Basit Yapılandırma: Statik dosyaları sunmak için karmaşık ayarlara gerek yoktur.
- Güvenlik: PHP gibi dinamik içeriklerin aksine, statik dosyalar daha az saldırı yüzeyine sahiptir.
Nginx’in Avantajları: İstatistiksel Veriler
- Yükleme Süresi: Nginx ile statik siteler, Apache’ye göre %30-50 daha hızlı yüklenir (Kaynak: WebPageTest).
- Bellek Kullanımı: Nginx, Apache’ye göre %40 daha az bellek tüketir (Kaynak: NGINX Inc.).
- Eşzamanlı Bağlantı Sayısı: Nginx, 10.000’e kadar bağlantıyı aynı anda yönetebilir (Kaynak: Nginx Belgeleri).
2. Nginx Kurulumu ve Temel Yapılandırma
Adım 1: Nginx Kurulumu
Nginx’i Ubuntu/Debian tabanlı sistemlere aşağıdaki komutlarla kurabilirsiniz:
# Paket listesini güncelleyin
sudo apt update
# Nginx'i kurun
sudo apt install nginx -y
# Hizmeti başlatın
sudo systemctl start nginx
# Sistem başlangıcında otomatik olarak başlamasını sağlayın
sudo systemctl enable nginx
Kurulum tamamlandıktan sonra, tarayıcınızda http://sunucu-ip-adresi adresine giderek varsayılan Nginx sayfasını görebilirsiniz.
Adım 2: Temel Nginx Yapılandırması
Nginx’in ana yapılandırma dosyası /etc/nginx/nginx.conf konumundadır. Ancak, statik siteler için genellikle site-specific yapılandırmalar kullanılır. Bu dosyalar /etc/nginx/sites-available/ dizininde bulunur.
Öncelikle, varsayılan yapılandırmayı kaldırın:
sudo rm /etc/nginx/sites-enabled/default
Şimdi, yeni bir yapılandırma dosyası oluşturun:
sudo nano /etc/nginx/sites-available/static-site.conf
Aşağıdaki içeriği ekleyin (örnek olarak example.com alan adını kullanıyoruz):
server {
listen 80;
server_name example.com www.example.com;
root /var/www/static-site;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Adım 3: Yapılandırmayı Etkinleştirme
Yapılandırma dosyasını sites-enabled dizinine sembolik bir bağlantı olarak ekleyin:
sudo ln -s /etc/nginx/sites-available/static-site.conf /etc/nginx/sites-enabled/
Son olarak, Nginx’i yeniden yükleyin:
sudo nginx -t # Yapılandırmayı test edin
sudo systemctl reload nginx # Nginx'i yeniden yükleyin
3. Statik Siteyi Nginx’e Dağıtma
Statik sitenizi Nginx’e dağıtmak için aşağıdaki adımları izleyin:
Adım 1: Statik Dosyaları Hazırlama
Statik sitenizin dosyalarını (index.html, style.css, script.js, vb.) /var/www/static-site dizinine kopyalayın:
sudo mkdir -p /var/www/static-site
sudo chown -R $USER:$USER /var/www/static-site
# Örnek: Bir statik site oluşturun (örneğin, bir HTML dosyası)
echo "<h1>Merhaba, Nginx!</h1>" | sudo tee /var/www/static-site/index.html
Adım 2: Dosya İzinlerini Ayarlama
Nginx’in statik dosyalara erişebilmesi için doğru izinleri ayarlayın:
sudo chmod -R 755 /var/www/static-site
sudo chown -R www-data:www-data /var/www/static-site
Adım 3: Nginx’i Test Edin
Tarayıcınızda http://example.com adresine giderek sitenizin çalıştığını doğrulayın.
4. Performans Optimizasyonu
Statik sitelerin performansını artırmak için aşağıdaki teknikleri kullanabilirsiniz:
1. Gzip Sıkıştırma
Nginx, HTTP yanıtlarını sıkıştırarak aktarım süresini azaltabilir. Bunu /etc/nginx/nginx.conf dosyasına aşağıdaki satırları ekleyerek yapabilirsiniz:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1000;
gzip_proxied any;
gzip_vary on;
Daha sonra Nginx’i yeniden yükleyin:
sudo systemctl reload nginx
2. Tarayıcı Önbelleği (Browser Caching)
Statik dosyaların tarayıcıda önbelleğe alınmasını sağlayarak, tekrarlanan ziyaretlerde yükleme süresini azaltabilirsiniz. /etc/nginx/sites-available/static-site.conf dosyasına aşağıdaki satırları ekleyin:
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|woff|ttf)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
}
3. HTTP/2 Desteği
HTTP/2, çoklu bağlantıları tek bir bağlantı üzerinden yöneterek performansı artırır. Nginx’de HTTP/2 desteğini etkinleştirmek için /etc/nginx/sites-available/static-site.conf dosyasına aşağıdaki satırı ekleyin:
listen 443 ssl http2;
4. Keep-Alive Süresini Artırma
Keep-Alive, aynı bağlantının birden fazla HTTP isteği için kullanılmasını sağlar. Bu süreyi artırarak performansı iyileştirebilirsiniz. /etc/nginx/nginx.conf dosyasına aşağıdaki satırı ekleyin:
keepalive_timeout 65;
5. Güvenlik İpuçları
Statik sitelerin güvenliğini artırmak için aşağıdaki adımları izleyin:
1. SSL Sertifikası Kurulumu (HTTPS)
Statik sitelerinizde HTTPS kullanmak, verilerinizi korumanın yanı sıra Google sıralamalarını da olumlu etkiler. Ücretsiz SSL sertifikaları için Let’s Encrypt kullanabilirsiniz.
Adım 1: Certbot Kurulumu
sudo apt install certbot python3-certbot-nginx -y
Adım 2: SSL Sertifikası Alın
sudo certbot --nginx -d example.com -d www.example.com
Certbot, otomatik olarak Nginx yapılandırmasını güncelleyerek HTTPS’yi etkinleştirecektir.
Adım 3: Otomatik Yenileme Ayarı
Let’s Encrypt sertifikaları 90 günlük bir süreye sahiptir. Otomatik yenileme için bir cron job ekleyin:
sudo crontab -e
Aşağıdaki satırı ekleyin:
0 3 * * * /usr/bin/certbot renew --quiet
2. Güvenlik Duvarı (UFW) Kuralları
Statik sitelerinizi korumak için UFW (Uncomplicated Firewall) kullanabilirsiniz. Aşağıdaki kuralları uygulayın:
# HTTP ve HTTPS için izin ver
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# SSH için sadece belirli IP’lerden erişime izin ver (güvenlik için)
sudo ufw allow from 192.168.1.100 to any port 22
# UFW’yi etkinleştir
sudo ufw enable
3. Nginx Güvenlik Ayarları
Nginx’in güvenliğini artırmak için /etc/nginx/nginx.conf dosyasına aşağıdaki ayarları ekleyin:
# Sunucu imzasını gizleyin
server_tokens off;
# Güvensiz HTTP yöntemlerini engelleyin
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}
# Kök dizininde dizin listesi engelleyin
location / {
autoindex off;
}
6. Ölçeklenebilirlik ve Yük Dengeleme
Eğer statik siteniz yüksek trafik alıyorsa, yük dengeleme (load balancing) ve ölçeklenebilirlik için aşağıdaki çözümleri düşünebilirsiniz:
1. Nginx ile Yük Dengeleme
Nginx, basit bir yük dengeleyici olarak kullanılabilir. /etc/nginx/nginx.conf dosyasına aşağıdaki yapılandırmayı ekleyin:
upstream backend {
server 192.168.1.100;
server 192.168.1.101;
server 192.168.1.102;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
2. CDN Kullanımı
Cloudflare, CloudFront veya BunnyCDN gibi CDN hizmetleri, statik dosyalarınızın dünya genelinde hızlı bir şekilde dağıtılmasını sağlar. CDN kullanarak:
- Yükleme sürelerini %50’ye kadar azaltabilirsiniz.
- Sunucu yükünü %70’e kadar azaltabilirsiniz.
- DDoS saldırılarına karşı koruma sağlayabilirsiniz.
7. İzleme ve Hata Ayıklama
Statik sitenizin performansını ve güvenliğini izlemek için aşağıdaki araçları kullanabilirsiniz:
1. Nginx Logları
Nginx’in log dosyalarını inceleyerek hataları ve performans sorunlarını tespit edebilirsiniz:
# Erişim loglarını görüntüleyin
tail -f /var/log/nginx/access.log
# Hata loglarını görüntüleyin
tail -f /var/log/nginx/error.log
2. Prometheus ve Grafana ile İzleme
Prometheus ve Grafana kullanarak Nginx’in performansını ve trafiğini izleyebilirsiniz:
-
Prometheus Nginx Exporter kurun:
sudo apt install prometheus-nginx-exporter -
Prometheus yapılandırma dosyasına Nginx exporter’ı ekleyin:
- job_name: 'nginx' static_configs: - targets: ['localhost:9113'] -
Grafana ile verileri görselleştirin.
3. Uptime Kuma ile Site İzleme
Ücretsiz ve açık kaynaklı Uptime Kuma aracını kullanarak sitenizin kullanılabilirliğini izleyebilirsiniz:
# Docker ile Uptime Kuma kurun
docker run -d --name uptime-kuma -p 3001:3001 -v uptime-kuma:/app/data louislam/uptime-kuma
Daha sonra, http://sunucu-ip-adresi:3001 adresine giderek sitenizin durumunu izleyebilirsiniz.
8. Sonuç ve Öneriler
Nginx kullanarak statik sitelerinizi yayınlamak, performans, güvenlik ve ölçeklenebilirlik açısından birçok avantaj sağlar. Bu rehberde ele aldığımız konuların özeti:
| Konu | Öneri |
|---|---|
| Temel Yapılandırma | Basit bir Nginx yapılandırması ile başlayın. |
| Performans | Gzip sıkıştırma, HTTP/2 ve tarayıcı önbelleği kullanın. |
| Güvenlik | HTTPS, UFW ve Nginx güvenlik ayarlarını uygulayın. |
| Ölçeklenebilirlik | Yük dengeleme ve CDN kullanın. |
| İzleme | Nginx logları, Prometheus ve Uptime Kuma ile sürekli izleme yapın. |
İleri Düzey İpuçları
- Brotli Sıkıştırma: Gzip’e göre daha iyi sıkıştırma oranları sunar. Nginx’e Brotli desteği eklemek için bu rehberi takip edin.
- Rate Limiting: DDoS saldırılarına karşı koruma sağlamak için Nginx’e rate limiting ekleyin:
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; server { location / { limit_req zone=one burst=20 nodelay; } } - ModSecurity: Web uygulama güvenlik duvarı (WAF) olarak ModSecurity’yi kullanın.
9. Kaynaklar ve Referanslar
Bu rehberde, Nginx kullanarak statik sitelerinizi nasıl yayınlayabileceğinizi, performansını nasıl optimize edeceğinizi ve güvenliği nasıl artıracağınızı adım adım öğrendiniz. Statik sitelerinizi yayınlarken bu ipuçlarını uygulayarak, hızlı, güvenli ve ölçeklenebilir bir web deneyimi sunabilirsiniz. İyi kodlamalar! 🚀
Bu yazı Mistral ile otomatik oluşturulmuştur.