Nginx ile Site Yayınlama ve Let's Encrypt SSL Kurulumu
Alan adınızı VPS'e yönlendirin, Nginx'i kurun, sitenizi yayınlayın ve Certbot ile ücretsiz Let's Encrypt SSL alın. Ubuntu 24.04 için adım adım rehber.
Kendi VPS'inizde bir web sitesi yayınlamak, paylaşımlı hostinge göre çok daha fazla kontrol sağlar: hangi yazılımın çalışacağına, önbelleğin nasıl davranacağına ve sertifikanızın nasıl yenileneceğine siz karar verirsiniz. Bu rehberde Ubuntu 24.04 üzerinde Nginx kurulumu, ilk sitenizin yayına alınması ve Certbot ile ücretsiz Let's Encrypt SSL kurulumunu baştan sona anlatıyoruz. Sonunda, sitenizi HTTPS üzerinden açan ve sertifikasını kendi kendine yenileyen bir sunucunuz olacak.
Örneklerde alan adı olarak example.com kullanıyoruz; komutları kendi alan adınızla değiştirin. Komutları sudo yetkili bir kullanıcıyla çalıştırdığınızı varsayıyoruz.
Başlamadan önce: neye ihtiyacınız var?
- Ubuntu 24.04 kurulu bir VPS ve SSH erişimi (SSH'ye yeniyseniz SSH nedir yazımıza bakabilirsiniz).
- Bir alan adı ve DNS kayıtlarını düzenleyebileceğiniz bir panel.
- Sunucunun genel IP adresi.
1. Adım: DNS kaydını sunucuya yönlendirin
SSL sertifikası almadan önce alan adınızın sunucunuzu göstermesi gerekir, çünkü Let's Encrypt doğrulama için alan adınıza HTTP üzerinden bağlanır. Alan adınızın DNS panelinde şu kayıtları oluşturun:
| Tür | Ad | Değer |
|---|---|---|
| A | @ | Sunucunuzun IPv4 adresi |
| A | www | Sunucunuzun IPv4 adresi |
| AAAA | @ ve www | IPv6 adresiniz (varsa) |
DNS'in nasıl çalıştığını merak ediyorsanız DNS nedir yazımız iyi bir başlangıç. Kayıtların yayılıp yayılmadığını kendi bilgisayarınızdan ya da sunucudan kontrol edebilirsiniz:
dig +short example.com A
dig +short www.example.com A
dig +short example.com AAAA
Çıktıda sunucunuzun IP adresini görüyorsanız devam edebilirsiniz. Boş çıktı ya da eski bir IP görüyorsanız biraz bekleyin. Önemli: Sunucunuzda IPv6 adresi yoksa ya da Nginx IPv6'da dinlemiyorsa AAAA kaydı eklemeyin; aksi hâlde doğrulama yanlış adrese gidebilir.
2. Adım: Nginx kurulumu
Önce paket listesini güncelleyin ve Nginx'i kurun:
sudo apt update
sudo apt install -y nginx
Kurulumdan sonra servis otomatik başlar. Durumunu kontrol edin:
systemctl status nginx --no-pager
active (running) görüyorsanız tarayıcıda http://SUNUCU_IP adresine gittiğinizde Nginx'in varsayılan karşılama sayfası açılmalı.
3. Adım: Güvenlik duvarında HTTP ve HTTPS'e izin verin
UFW kullanıyorsanız SSH erişiminizi koruyarak 80 ve 443 portlarını açın:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status
Nginx Full profili hem 80/tcp hem 443/tcp portunu açar. OpenSSH kuralını eklemeden ufw enable çalıştırmayın; bağlantınız kesilebilir. Sunucu güvenliği için diğer temel adımları Linux sunucu güvenliği yazımızda bulabilirsiniz.
4. Adım: Site dizinini oluşturun
Her site için ayrı bir dizin kullanmak, ileride birden fazla siteyi aynı sunucuda barındırmayı kolaylaştırır:
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
echo '<h1>example.com çalışıyor</h1>' > /var/www/example.com/html/index.html
Dosyalarınızı daha sonra scp, rsync ya da Git ile bu dizine yükleyebilirsiniz.
5. Adım: Nginx server block yapılandırması
Nginx'te her site bir "server block" ile tanımlanır. Yeni bir yapılandırma dosyası oluşturun:
sudo nano /etc/nginx/sites-available/example.com
İçine şunu yazın:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
Dosyayı etkinleştirmek için sites-enabled dizinine sembolik bağlantı oluşturun. Varsayılan siteye ihtiyacınız yoksa onu devre dışı bırakabilirsiniz:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
Her değişiklikten sonra önce yapılandırmayı test edin, sonra yeniden yükleyin:
sudo nginx -t
sudo systemctl reload nginx
syntax is ok ve test is successful mesajlarını görmeden reload yapmayın. Artık http://example.com adresinde kendi sayfanızı görmelisiniz.
6. Adım: Certbot ile Let's Encrypt SSL kurulumu
Let's Encrypt, 90 gün geçerli ücretsiz sertifikalar veren bir sertifika otoritesidir. SSL'in ne işe yaradığını SSL sertifikası nedir yazımızda anlattık. Certbot'u ve Nginx eklentisini Ubuntu depolarından kurun:
sudo apt install -y certbot python3-certbot-nginx
Not: Certbot geliştiricileri en güncel sürüm için snap paketini önerir (
sudo snap install --classic certbot). Ubuntu deposundaki sürüm de çoğu kullanım için yeterlidir; ikisinden yalnızca birini kurun.
Sertifikayı alın:
sudo certbot --nginx -d example.com -d www.example.com
Certbot ilk çalıştırmada e-posta adresinizi ve kullanım koşullarını onaylamanızı ister. Ardından alan adınızı doğrular, sertifikayı alır ve server block'unuza listen 443 ssl satırlarını ekler. Güncel Certbot sürümleri HTTP isteklerini HTTPS'e yönlendiren kuralı da otomatik ekler; eski sürümler bunu soru olarak sorar, "redirect" seçeneğini seçin.
Sonucu kontrol edin:
curl -I http://example.com
curl -I https://example.com
İlk komut 301 Moved Permanently ile HTTPS adresine yönlendirme, ikincisi 200 OK döndürmeli.
7. Adım: Otomatik yenilemeyi doğrulayın
Let's Encrypt sertifikaları 90 gün geçerlidir; Certbot kurulduğunda bir systemd zamanlayıcısı oluşturur ve süresi yaklaşan sertifikaları kendisi yeniler. Zamanlayıcının çalıştığını ve yenilemenin sorunsuz olacağını test edin:
systemctl list-timers | grep certbot
sudo certbot renew --dry-run
Snap sürümünü kullanıyorsanız zamanlayıcının adı snap.certbot.renew.timer olarak görünür. --dry-run hata vermiyorsa ek bir işlem yapmanıza gerek yok.
Bonus: Nginx'i reverse proxy olarak kullanmak
Node.js, Python ya da Docker içinde çalışan bir uygulamanız varsa (ör. 3000 portunda), Nginx'i önüne koyup SSL'i Nginx'te sonlandırabilirsiniz. Server block'taki location / bölümünü şöyle değiştirin:
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 "upgrade";
}
Upgrade ve Connection başlıkları WebSocket kullanan uygulamalar için gereklidir. Uygulamanızın yalnızca 127.0.0.1 üzerinde dinlemesi, 3000 portunun dışarıya kapalı kalmasını sağlar. Docker'a yeniyseniz Docker kurulumu rehberimize de bakabilirsiniz.
Sık karşılaşılan hatalar
Certbot "Timeout during connect" ya da "Connection refused" diyor. 80 portu dışarıdan erişilebilir değil. sudo ufw status ile kuralı, sudo ss -tlnp | grep :80 ile Nginx'in dinleyip dinlemediğini kontrol edin.
"NXDOMAIN" ya da yanlış IP hatası. DNS kaydı henüz yayılmamış ya da yanlış. dig +short çıktısını tekrar kontrol edin; AAAA kaydı yanlış bir IPv6 adresine işaret ediyorsa silin.
"too many certificates already issued". Let's Encrypt'in oran sınırlarına takıldınız. Denemeleri --dry-run ya da --staging ile yapın, sınır sıfırlanana kadar bekleyin.
502 Bad Gateway. Reverse proxy kullanıyorsanız arka plandaki uygulama çalışmıyor ya da yanlış portta. curl http://127.0.0.1:3000 ile uygulamayı doğrudan test edin ve sudo tail -n 50 /var/log/nginx/error.log çıktısına bakın.
Değişiklik sonrası site açılmıyor. sudo nginx -t ile yapılandırmayı test edin; hata mesajı genellikle dosya adı ve satır numarasını verir.
Sık Sorulan Sorular
Let's Encrypt sertifikası gerçekten ücretsiz mi?
Evet. Let's Encrypt, alan adı doğrulamalı (DV) sertifikaları ücretsiz verir. Sertifikalar 90 gün geçerlidir ancak Certbot bunları otomatik yeniler; tarayıcılar bu sertifikalara ücretli DV sertifikalar kadar güvenir.
Aynı VPS'te birden fazla site yayınlayabilir miyim?
Evet. Her site için /var/www altında ayrı bir dizin ve /etc/nginx/sites-available altında ayrı bir server block oluşturun, ardından her biri için certbot --nginx -d alanadi komutunu çalıştırın. Sınır, sunucunuzun RAM ve işlemci kaynaklarıdır.
Apache yerine neden Nginx?
Nginx, statik dosyaları ve çok sayıda eşzamanlı bağlantıyı az bellekle sunar; reverse proxy olarak da çok yaygındır. Düşük RAM'li bir VPS'te bu fark özellikle hissedilir. Apache'ye özgü .htaccess kurallarına bağımlı bir uygulamanız varsa Apache de iyi bir seçimdir.
Sitenizi İstanbul'daki bir VPS'te yayınlayın
Bu rehberdeki kurulum, en küçük paketlerde bile rahatça çalışır. TürkiyeVPS'in VPS paketleri aylık $0.89'dan başlar; Ubuntu 24.04 veya Debian 12, tam root erişimi ve limitsiz trafikle gelir, ödeme onaylandığı anda otomatik kurulur. Trafiği yüksek ya da daha öngörülebilir performans isteyen siteler için VDS paketlerimize göz atabilirsiniz. Takıldığınız bir adım olursa sitedeki canlı destekten ya da destek talebiyle bize yazabilirsiniz.
Bunları da okuyun
512 MB veya 1 GB RAM'li bir VPS'te uygulamalarınız kapanıyorsa swap alanı ilk yardımdır. Ubuntu 24.04'te swap...
Bilgisayarınız kapanınca botunuz da susmasın. Python Telegram botunu Ubuntu 24.04 VPS'te systemd ile 7/24 çalı...
Metin2 sunucusu kuracaksınız ama VPS mi VDS mi alacağınızdan emin değil misiniz? Kaynak paylaşımı, RAM, disk,...