Nginx SSL/TLS Otomatik Kurulum
Nginx web sunucusuna Let's Encrypt ile ücretsiz SSL/TLS sertifikası kuran ve otomatik yenileme yapılandıran script.
Detaylı Bilgi
Bu script, Nginx web sunucunuza Let's Encrypt ile ücretsiz SSL/TLS sertifikası kurar ve otomatik yenileme yapılandırır. HTTPS, modern web siteleri için zorunludur ve SEO, güvenlik ve kullanıcı güveni açısından kritik öneme sahiptir.
Script Ne İşe Yarar?
Bu script, SSL/TLS sertifikası kurulum sürecini tamamen otomatikleştirir:
- Certbot aracını kurar (yoksa)
- Nginx yapılandırması oluşturur
- Let's Encrypt'ten ücretsiz SSL sertifikası alır
- HTTPS yönlendirmesi yapılandırır
- Otomatik sertifika yenileme ayarlar
Neden Kullanmalısınız?
HTTPS, modern web için zorunludur çünkü:
- Güvenlik: Veri şifreleme sağlar
- SEO: Google HTTPS'i tercih eder
- Güven: Kullanıcılar güvenli bağlantı görür
- Performans: HTTP/2 desteği
- Zorunluluk: Modern tarayıcılar HTTP'yi uyarır
Let's Encrypt Avantajları
- Tamamen ücretsiz
- Otomatik yenileme
- Güvenilir ve yaygın kullanılan
- 90 günlük sertifika süresi (otomatik yenilenir)
Nasıl Kullanılır?
Adım Adım Kullanım Kılavuzu
1. Ön Gereksinimler
Scripti çalıştırmadan önce:
- Domain adınızın sunucunun IP adresine işaret ettiğinden emin olun
- 80 ve 443 portlarının açık olduğundan emin olun
- Nginx kurulu olmalı
2. DNS Kontrolü
# Domain'in IP'ye işaret ettiğini kontrol et
nslookup yourdomain.com
dig yourdomain.com
# A kaydı doğru olmalı
# A yourdomain.com 192.168.1.100
3. Scripti Çalıştırın
sudo ./nginx_ssl_setup.sh
Script sizden domain adı ve e-posta adresi isteyecektir.
4. Doğrulama
Script çalıştıktan sonra:
# SSL sertifikasını kontrol et
certbot certificates
# Nginx yapılandırmasını test et
nginx -t
# Sertifika yenilemeyi test et
certbot renew --dry-run
Otomatik Yenileme
Let's Encrypt sertifikaları 90 günde bir otomatik olarak yenilenir. Sistemde bir cron job veya systemd timer kurulu olmalı:
# Cron job kontrolü
systemctl status certbot.timer
# Manuel yenileme
sudo certbot renew Gereksinimler
Gereksinimler
- Root Yetkisi: Script root olarak çalıştırılmalı
- Nginx: Web sunucusu kurulu olmalı
- Domain Adı: Geçerli bir domain adı ve DNS kaydı
- Açık Portlar: 80 (HTTP) ve 443 (HTTPS) portları açık olmalı
- Python 3: Certbot için gerekli
- İnternet Bağlantısı: Let's Encrypt'e erişim
DNS Yapılandırması
Domain adınızın sunucunuzun IP adresine işaret etmesi gerekir:
# DNS kaydı örneği
A yourdomain.com 192.168.1.100
A www.yourdomain.com 192.168.1.100
Port Kontrolü
# Portların açık olduğunu kontrol et
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Veya firewall kurallarını kontrol et
sudo iptables -L -n | grep -E "80|443" Kullanım Senaryoları
Kullanım Senaryoları
1. Yeni Web Sitesi Kurulumu
Yeni bir web sitesi kurduğunuzda, SSL sertifikasını hızlıca kurmak için bu scripti kullanabilirsiniz.
2. HTTP'den HTTPS'e Geçiş
Mevcut HTTP sitelerinizi HTTPS'e geçirmek için kullanabilirsiniz. Script otomatik yönlendirme yapılandırır.
3. Çoklu Domain Yönetimi
Birden fazla domain için SSL sertifikası kurmanız gerekiyorsa, scripti her domain için çalıştırabilirsiniz.
4. Test Ortamları
Test ortamlarında da SSL sertifikası kurmak için kullanabilirsiniz. Let's Encrypt test ortamları için de çalışır.
5. Wildcard Sertifikalar
Scripti düzenleyerek wildcard sertifikalar (*.domain.com) için de kullanabilirsiniz.
Örnekler
Kullanım Örnekleri
Örnek 1: Temel Kullanım
# Scripti çalıştır
sudo ./nginx_ssl_setup.sh
# Domain ve e-posta girin
Enter your domain name: example.com
Enter your email: [email protected]
# Script otomatik olarak:
# - Certbot kurar
# - Nginx yapılandırması oluşturur
# - SSL sertifikası alır
# - HTTPS yönlendirmesi yapar
Örnek 2: Wildcard Sertifika
# Scripti düzenleyerek wildcard sertifika alın
certbot certonly --dns-cloudflare \
-d "*.example.com" \
-d "example.com"
Örnek 3: Çoklu Domain
# Birden fazla domain için sertifika
certbot --nginx \
-d example.com \
-d www.example.com \
-d api.example.com \
-d admin.example.com Kod
#!/bin/bash
# Nginx SSL/TLS Auto Setup with Let's Encrypt
if [ "$EUID" -ne 0 ]; then
echo "Please run as root"
exit 1
fi
read -p "Enter your domain name: " DOMAIN
read -p "Enter your email: " EMAIL
echo ""
echo "Setting up SSL for $DOMAIN"
echo ""
if ! command -v certbot &> /dev/null; then
echo "Installing certbot..."
apt-get update
apt-get install -y certbot python3-certbot-nginx
fi
if ! systemctl is-active --quiet nginx; then
echo "Starting nginx..."
systemctl start nginx
fi
NGINX_CONF="/etc/nginx/sites-available/$DOMAIN"
cat > "$NGINX_CONF" <<EOF
server {
listen 80;
listen [::]:80;
server_name $DOMAIN www.$DOMAIN;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host \$host;
proxy_cache_bypass \$http_upgrade;
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;
}
}
EOF
ln -sf "$NGINX_CONF" /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
echo "✓ Nginx configuration created"
echo ""
echo "Obtaining SSL certificate..."
certbot --nginx -d "$DOMAIN" -d "www.$DOMAIN" --non-interactive --agree-tos --email "$EMAIL" --redirect
if [ $? -eq 0 ]; then
echo "✓ SSL certificate installed successfully"
echo ""
echo "Testing automatic renewal..."
certbot renew --dry-run
if [ $? -eq 0 ]; then
echo "✓ Automatic renewal is configured"
else
echo "⚠️ Warning: Automatic renewal test failed"
fi
else
echo "✗ Failed to obtain SSL certificate"
exit 1
fi
echo ""
echo "======================================"
echo "SSL Setup Complete!"
echo "======================================"
echo "Your site is now available at:"
echo "https://$DOMAIN"
echo ""
echo "Certificate will auto-renew before expiration"
echo "You can manually renew with: certbot renew"
Kullanım
# Root olarak çalıştır
sudo chmod +x nginx_ssl_setup.sh
sudo ./nginx_ssl_setup.sh
# Domain adınızı ve e-postanızı girin
# Script otomatik olarak SSL kuracak
Sorun Giderme
Sorun Giderme
Problem: "Failed to obtain certificate"
Çözüm: DNS kayıtlarını kontrol edin. Domain sunucunun IP'sine işaret etmeli:
# DNS kontrolü
nslookup yourdomain.com
dig yourdomain.com +short
Problem: "Port 80 is already in use"
Çözüm: 80 portunu kullanan servisi bulun ve durdurun:
sudo netstat -tulpn | grep :80
sudo systemctl stop apache2 # Apache kullanıyorsanız
Problem: "Nginx configuration test failed"
Çözüm: Nginx yapılandırmasını kontrol edin:
nginx -t
# Hataları düzeltin ve tekrar deneyin
Problem: Sertifika Yenilenmiyor
Çözüm: Certbot timer'ı kontrol edin:
systemctl status certbot.timer
systemctl enable certbot.timer
systemctl start certbot.timer