
Node.js, Python veya PHP ile geliştirilen uygulamaları doğrudan internete açmak yerine önüne Nginx koymak; SSL yönetimini, sıkıştırmayı, önbelleklemeyi ve güvenlik başlıklarını tek noktada toplar. Bu rehberde 3000 portunda çalışan bir uygulamayı Nginx arkasına alıp ücretsiz Let's Encrypt sertifikasıyla güvenli ve hızlı hale getiriyoruz.
1. Nginx'i kurun
sudo apt update
sudo apt install nginx -y
sudo systemctl enable --now nginx2. WebSocket desteği için bağlantı eşlemesini tanımlayın
Gerçek zamanlı özellikler (canlı bildirimler, HMR, sohbet) WebSocket kullanır. Aşağıdaki eşlemeyi /etc/nginx/conf.d/connection-upgrade.conf dosyasına ekleyin; böylece her istekte doğru Connection başlığı gönderilir.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}3. Reverse proxy sunucu bloğunu oluşturun
/etc/nginx/sites-available/ornek.com dosyasını oluşturun. ornek.com yerine kendi alan adınızı yazın.
server {
listen 80;
listen [::]:80;
server_name ornek.com www.ornek.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}4. Siteyi etkinleştirin
nginx -t komutu, hatalı bir yapılandırmanın yayındaki siteyi düşürmesini engeller. Yeniden yüklemeyi her zaman testten sonra yapın.
sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx5. Let's Encrypt ile SSL sertifikası alın
Certbot, sertifikayı alır, Nginx yapılandırmanıza HTTPS bloğunu ekler ve HTTP trafiğini HTTPS'e yönlendirir. Sertifikalar 90 gün geçerlidir; otomatik yenileme zamanlayıcısı kurulumla birlikte gelir.
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d ornek.com -d www.ornek.com
sudo certbot renew --dry-runÖnemli: Sertifika almadan önce alan adınızın DNS A kaydının sunucu IP adresine yönlendiğinden ve UFW'de 80/443 portlarının açık olduğundan emin olun.
6. TLS ayarlarını optimize edin
Certbot'un eklediği HTTPS sunucu bloğuna aşağıdaki ayarları ekleyerek eski protokolleri kapatın, oturum tekrar kullanımını açın ve tarayıcıları her zaman HTTPS kullanmaya zorlayın. HSTS başlığını yalnızca tüm alt alan adlarınız HTTPS ile çalışıyorsa ekleyin.
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
add_header Strict-Transport-Security "max-age=63072000" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;7. HTTP/2'yi açın
Nginx 1.25.1 ve üzeri sürümlerde HTTP/2 ayrı bir yönergeyle açılır. Eski sürümlerde ise listen satırına http2 parametresi eklenir.
# Nginx 1.25.1 ve üzeri
listen 443 ssl;
http2 on;
# Daha eski sürümler
# listen 443 ssl http2;8. Sıkıştırma ve önbellekleme ile performansı artırın
/etc/nginx/nginx.conf dosyasının http bloğunda gzip ayarlarını yapın. Değişmeyen statik dosyalar için uzun süreli tarayıcı önbelleği tanımlamak sayfa yüklemelerini belirgin şekilde hızlandırır.
# nginx.conf → http { ... }
worker_processes auto; # nginx.conf en üst seviyesinde
gzip on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_proxied any;
gzip_vary on;
gzip_types text/css application/javascript application/json image/svg+xml;
# server { ... } içinde, örnek: Next.js statik dosyaları
location /_next/static/ {
proxy_pass http://127.0.0.1:3000;
add_header Cache-Control "public, max-age=31536000, immutable";
}9. Test edin ve izleyin
- sudo nginx -t — her değişiklikten sonra yapılandırma testi
- curl -I https://ornek.com — HTTPS yanıtı ve güvenlik başlıklarının kontrolü
- sudo tail -f /var/log/nginx/error.log — anlık hata takibi
- sudo certbot certificates — sertifika bitiş tarihleri
- SSL Labs gibi araçlarla dışarıdan TLS puanı kontrolü

