Yeni bir VPS aldınız ve üzerine bir web sunucusu kurmanız mı gerekiyor? Bu rehberde, sıfır bir Ubuntu 24.04 LTS sunucusunda Nginx’i kurup ilk statik sitenizi HTTPS destekli biçimde yayına almanın adımlarını, sık karşılaşılan hatalarla birlikte anlatıyoruz.
1. Sunucuya bağlanın ve güncelleyin
SSH ile sunucuya bağlandıktan sonra ilk adım her zaman paket listesini güncellemek ve mevcut paketleri yükseltmek:
sudo apt update && sudo apt upgrade -y
Bu komut çalışırken bazı paketler için yeniden başlatma (reboot) gerekebileceğine dair bir uyarı görebilirsiniz; ilk kurulumda bu uyarıyı onaylayıp sunucuyu bir kez yeniden başlatmanız güvenlidir.
2. Nginx’i kurun
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
Kurulumun başarılı olup olmadığını kontrol etmek için servis durumuna bakın:
sudo systemctl status nginx
Çıktıda active (running) ifadesini görmelisiniz. Ardından sunucunun IP adresine bir tarayıcıdan gidildiğinde Nginx’in varsayılan karşılama sayfasını (“Welcome to nginx!”) görmelisiniz. Bu, HTTP port 80’in servis tarafından dinlendiğinin ilk doğrulamasıdır.
3. Güvenlik duvarını yapılandırın
Ubuntu’nun varsayılan güvenlik duvarı ufw ile yalnızca gerekli portları açık bırakmak önemli. Nginx kurulumu, ufw için hazır uygulama profilleri kaydeder:
sudo ufw app list
# Çıktıda: Nginx Full, Nginx HTTP, Nginx HTTPS görürsünüz
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Nginx Full profili hem 80 (HTTP) hem 443 (HTTPS) portlarını açar; OpenSSH kuralını eklemeyi unutmayın. Aksi hâlde ufw enable komutundan sonra SSH bağlantınız kesilip sunucudan dışarıda kalabilirsiniz. Kuralları doğrulamak için:
sudo ufw status verbose
4. İlk sitenizi yayına alın
Statik dosyalarınızı sunucuda bir dizine kopyalayın (örneğin /var/www/siteniz.com/html) ve doğru izinleri verin:
sudo mkdir -p /var/www/siteniz.com/html
sudo chown -R $USER:$USER /var/www/siteniz.com/html
Ardından Nginx için bir site yapılandırma dosyası oluşturun:
# /etc/nginx/sites-available/siteniz.com
server {
listen 80;
listen [::]:80;
server_name siteniz.com www.siteniz.com;
root /var/www/siteniz.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Yapılandırmayı etkinleştirin, varsayılan siteyi devre dışı bırakın (isteğe bağlı) ve Nginx’i test edip yeniden yükleyin:
sudo ln -s /etc/nginx/sites-available/siteniz.com /etc/nginx/sites-enabled/
sudo unlink /etc/nginx/sites-enabled/default # yalnızca gerekirse
sudo nginx -t
sudo systemctl reload nginx
nginx -t komutu, yapılandırma dosyasında sözdizimi hatası olup olmadığını kontrol eder; hata varsa Nginx’i yeniden yüklemeden önce mutlaka düzeltin. Aksi hâlde mevcut çalışan yapılandırma bozulmadan hata alırsınız, bu yüzden reload öncesi -t adımını asla atlamayın.
5. Çoklu site barındırma (isteğe bağlı)
Aynı sunucuda birden fazla domain barındıracaksanız, her domain için sites-available altında ayrı bir dosya oluşturup server_name alanını farklılaştırmanız yeterli. Nginx, gelen isteğin Host başlığına göre doğru server bloğunu otomatik seçer. Domain başına dizin yapısını tutarlı tutmak (/var/www/<domain>/html) ileride bakımı kolaylaştırır.
6. HTTPS ekleyin
Ücretsiz bir Let’s Encrypt sertifikası için Certbot’un Nginx eklentisini kullanabilirsiniz:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d siteniz.com -d www.siteniz.com
Certbot, sertifikayı aldıktan sonra Nginx yapılandırmanızı otomatik olarak günceller (443 portu için server bloğu ekler ve HTTP’den HTTPS’e yönlendirme kurar). İşlem sırasında sorulan e-posta adresi, sertifika süresi dolmadan önce hatırlatma almak için kullanılır.
Sertifikanın otomatik yenilendiğini doğrulamak için kuru bir test çalıştırabilirsiniz:
sudo certbot renew --dry-run
Let’s Encrypt sertifikaları 90 gün geçerlidir; Certbot kurulumu genelde bir systemd zamanlayıcı (timer) ile yenilemeyi otomatik olarak planlar, bu yüzden manuel müdahale gerekmez.
7. Temel güvenlik sıkılaştırması
Varsayılan Nginx yapılandırması, HTTP yanıt başlıklarında sürüm numarasını gösterir; bunu kapatmak saldırı yüzeyini küçük ama gerçek bir ölçüde azaltır. /etc/nginx/nginx.conf içindeki http bloğuna şu satırı ekleyin:
server_tokens off;
Ayrıca statik site barındıran sunucularda temel güvenlik başlıklarını eklemek iyi bir alışkanlıktır:
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
Değişikliklerden sonra her zaman sudo nginx -t ile doğrulayıp sudo systemctl reload nginx çalıştırmayı unutmayın.
8. Sık karşılaşılan sorunlar
- “502 Bad Gateway”: genellikle Nginx’in bir ters vekil (reverse proxy) olarak yönlendirdiği arka uç servis (örneğin Node.js veya PHP-FPM) çalışmıyordur; ilgili servisin durumunu kontrol edin.
- Yapılandırma değişikliği etkili olmuyor:
nginx -tile sözdizimini doğrulayıpsystemctl reload nginxçalıştırdığınızdan emin olun; bazen tarayıcı önbelleği de yanıltıcı olabilir. - Loglara bakma: sorun giderirken en değerli ilk adım loglara bakmaktır:
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log
Sonuç
Bu adımlarla birlikte sunucunuz artık HTTPS destekli, güvenlik duvarı yapılandırılmış, isteğe göre çoklu site barındırabilen bir Nginx kurulumuna sahip. Sonraki rehberlerde, statik dosya önbellekleme (caching), Gzip/Brotli sıkıştırma ve Nginx üzerinden basit bir ters vekil (reverse proxy) yapılandırmasını ele alacağız.