Blog Projeler Dokümanlar Araçlar Hizmetler Dosyalar Linkler Hakkımda İletişim
Sunucu, DNS, TLS, yedekleme ve dağıtım katmanlarından oluşan barındırma altyapısı

Ubuntu Üzerinde Nginx Kurulumu, Güvenlik ve Reverse Proxy

Ubuntu Server üzerinde Nginx kurulumu, UFW, server block, TLS, reverse proxy, systemd, log, güvenlik ve geri dönüş adımlarını üretime uygun biçimde açıklayan uygulamalı rehber.

Özet

Nginx'i üretime hazırlamak için paketi kurmak, servisi açmak ve varsayılan sayfayı görmek yeterli değildir. Güvenli bir kurulumda SSH erişimi korunur, yalnız gerekli web portları açılır, her alan adı ayrı server block ile yönetilir, yapılandırma nginx -t ile doğrulanmadan reload edilmez, uygulama portu internete açılmaz ve TLS yenilemesi ayrıca test edilir.

Ubuntu Üzerinde Nginx Kurulumu, Güvenlik ve Reverse Proxy için özgün teknik mimari ve uygulama görseli

Hedef Mimari

Bu rehberde internet trafiği 80 ve 443 numaralı portlardan Nginx'e gelir. Statik site doğrudan Nginx tarafından sunulur; ASP.NET Core, Node.js veya benzeri bir uygulama ise yalnız 127.0.0.1 üzerinde dinler ve Nginx üzerinden reverse proxy edilir. Böylece uygulama portu doğrudan dış ağa açılmaz, TLS ve temel HTTP politikaları tek giriş noktasında yönetilir.

Ön Koşullar

  • Ubuntu Server 22.04 LTS veya 24.04 LTS üzerinde güncel bir sistem.
  • sudo yetkili, root olmayan bir yönetici hesabı.
  • Firewall açılmadan önce doğrulanmış SSH erişimi.
  • Sunucunun genel IP adresine yönlenen bir alan adı; TLS adımı için DNS yayılımı tamamlanmış olmalı.
  • Mevcut yapılandırmanın ve uygulama artifact'inin geri dönüş kopyası.

Sunucu ve işletim sistemi bilgisini kaydedin:

cat /etc/os-release
uname -a
hostnamectl

1. Nginx'i Resmî Ubuntu Deposundan Kurma

Paket indeksini yenileyin ve Nginx'i kurun:

sudo apt update
sudo apt install nginx

Kurulumdan sonra paket sürümünü ve systemd durumunu doğrulayın:

nginx -v
sudo systemctl is-enabled nginx
sudo systemctl is-active nginx
sudo systemctl status nginx --no-pager

Yerel HTTP yanıtı gelmeden DNS veya TLS aşamasına geçmeyin:

curl -I http://127.0.0.1
sudo ss -lntp | grep -E ':(80|443)\\s'

2. UFW Kurallarını SSH Erişimini Kaybetmeden Açma

Önce kullanılabilir uygulama profillerini ve mevcut firewall durumunu okuyun:

sudo ufw app list
sudo ufw status verbose

Uzak bağlantı SSH üzerinden yapılıyorsa SSH kuralını doğrulamadan UFW'yi etkinleştirmeyin. Ardından yalnız kullanacağınız web profilini açın:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status numbered

TLS henüz kullanılmıyorsa geçici olarak yalnız Nginx HTTP profili açılabilir. Sertifika kurulduktan sonra 443 açılmalı ve gereksiz kural kaldırılmalıdır. Veritabanı ve uygulama portları genel internete açılmamalıdır.

3. Alan Adına Özel Server Block Oluşturma

Aşağıdaki örneklerde example.com değerini kendi alan adınızla değiştirin. Önce document root oluşturun:

sudo install -d -o "$USER" -g www-data -m 0750 /var/www/example.com/html
printf '%s\n' '<!doctype html><html lang="tr"><meta charset="utf-8"><title>Hazır</title><h1>Sunucu hazır</h1>' \
  | sudo tee /var/www/example.com/html/index.html > /dev/null
sudo chmod 0640 /var/www/example.com/html/index.html

/etc/nginx/sites-available/example.com dosyasını şu temel yapı ile oluşturun:

server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Siteyi etkinleştirin, sözdizimini test edin ve çalışan bağlantıları düşürmeden reload edin:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo nginx -t
sudo systemctl reload nginx
curl -I -H 'Host: example.com' http://127.0.0.1

nginx -t başarısızsa reload çalıştırmayın. Hata satırını düzeltin veya oluşturduğunuz sembolik bağlantıyı kaldırarak önceki yapılandırmaya dönün.

4. Uygulamayı Reverse Proxy Etme

Uygulamanın yalnız loopback üzerinde, örneğin 127.0.0.1:5000 adresinde dinlediğini doğrulayın. Ardından statik location bloğunu aşağıdaki proxy yapılandırmasıyla değiştirin:

location / {
    proxy_pass http://127.0.0.1:5000;
    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_connect_timeout 5s;
    proxy_send_timeout 30s;
    proxy_read_timeout 30s;
}

ASP.NET Core kullanıyorsanız forwarded headers yalnız bilinen proxy'den kabul edilmelidir; uygulama tarafında tüm ağları koşulsuz güvenilir ilan etmeyin. WebSocket kullanan uçlar için Upgrade ve Connection başlıklarını ayrı, kontrollü bir yapılandırmayla ekleyin.

Değişikliği doğrulayın:

sudo nginx -t
sudo systemctl reload nginx
curl -I -H 'Host: example.com' http://127.0.0.1

5. TLS Sertifikası ve Yenileme Testi

DNS kayıtları doğru sunucuya yönlendikten ve 80/443 portları erişilebilir olduktan sonra Certbot ve Nginx eklentisini kurun:

sudo apt update
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Sertifikanın otomatik yenileme yolunu yalnız zamanlayıcı varlığıyla değil kuru çalıştırmayla doğrulayın:

systemctl list-timers | grep certbot
sudo certbot renew --dry-run
curl -I https://example.com

Sertifika alınamıyorsa DNS, saat, firewall, NAT ve alan adının 80 numaralı porttan doğru server block'a ulaşıp ulaşmadığını kontrol edin. Hata çözülmeden geçici sertifika dosyaları uydurmayın.

6. Temel Güvenlik Ayarları

Ana http bloğunda sürüm bilgisini gizleyebilirsiniz:

server_tokens off;

Site düzeyinde güvenli ve genel başlıklar eklenebilir:

add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header X-Frame-Options "SAMEORIGIN" always;

Content Security Policy uygulamaya özeldir. Script, stil, reklam ve analitik kaynakları ölçülmeden internetten kopyalanmış geniş bir CSP kullanmayın. client_max_body_size, timeout ve rate limit değerlerini de gerçek dosya yükleme ve trafik gereksinimine göre belirleyin.

Yapılandırma dosyalarını yalnız yönetici yazabilmeli; Nginx worker kullanıcısına gereksiz yazma izni verilmemelidir:

sudo find /etc/nginx -type f -exec chmod 0644 {} \;
sudo find /etc/nginx -type d -exec chmod 0755 {} \;
sudo nginx -t

7. Log ve Hata Teşhisi

Başlıca tanı kaynakları şunlardır:

sudo journalctl -u nginx --since '30 minutes ago' --no-pager
sudo tail -n 100 /var/log/nginx/error.log
sudo tail -n 100 /var/log/nginx/access.log
sudo nginx -T
Belirti İlk kontrol Olası neden
502 Bad Gateway Backend portuna yerelden curl Uygulama kapalı, yanlış port veya socket izni
403 Forbidden Document root ve dizin izinleri Nginx kullanıcısı okuyamıyor veya index yok
Yanlış site açılıyor server_name ve etkin bağlantılar Varsayılan server block isteği yakalıyor
CSS/JS 404 Tarayıcı URL'si, root ve try_files Yanlış base path veya publish kökü
Reload başarısız sudo nginx -t Sözdizimi, yinelenen listen veya eksik dosya

8. Yedek ve Geri Dönüş

Değişiklikten önce Nginx yapılandırmasını sürümlü bir arşive alın:

sudo tar -C /etc -czf "$HOME/nginx-config-$(date +%Y%m%d-%H%M%S).tar.gz" nginx
sudo nginx -t

Yeni siteyi geri almak için önce etkin sembolik bağlantıyı kaldırın, yapılandırmayı test edin ve reload edin. Sertifika veya uygulama değişikliği de yapıldıysa bunların geri dönüşü ayrı ayrı planlanmalıdır.

Üretim Kontrol Listesi

  • systemctl is-active nginx sonucu active.
  • nginx -t başarılı ve reload sonrası yeni hata yok.
  • Yalnız SSH, HTTP ve HTTPS için gerekli firewall kuralları açık.
  • Alan adı doğru server block ve doğru sertifikayla yanıtlanıyor.
  • Backend yalnız loopback veya özel ağ üzerinde dinliyor.
  • certbot renew --dry-run başarılı.
  • Access ve error logları merkezi izleme veya saklama politikasına bağlı.
  • Yapılandırma yedeği ve geri dönüş adımı test edilmiş.

Kaynaklar

Güncelleme Bilgisi

Bu rehber Temmuz 2026'da Ubuntu, Nginx ve Certbot'un resmî dokümantasyonları kontrol edilerek hazırlanmıştır. Paket sürümü Ubuntu sürümüne ve güncelleme kanalına göre değişebileceği için kurulum sırasında görülen gerçek sürüm kaydedilmeli, yapılandırma hedef sistemde nginx -t ve dış HTTP kontrolleriyle doğrulanmalıdır.

Paylaş:

Bu yazı hakkında sorunuz mu var? İletişime geçin.

İletişime Geç

İlgili yazılar

Sunucu, DNS, TLS, yedekleme ve dağıtım katmanlarından oluşan barındırma altyapısı
DevOps, Sunucu, Bulut ve Dağıtım 29.04.2026

Plesk Nedir? Linux ve Windows Kurulum Rehberi

Plesk panelinin abonelik, domain, hosting, mail, DNS, veritabanı ve uygulama işlevlerini; temiz Linux ve Windows sunucu kurulumuyla birlikte açıklayan rehber.

29 Nis 2026
Sunucu, DNS, TLS, yedekleme ve dağıtım katmanlarından oluşan barındırma altyapısı
DevOps, Sunucu, Bulut ve Dağıtım 11.05.2026

cPanel Nedir? WHM, Hosting Hesabı, DNS ve E-posta Rehberi

cPanel ile WHM arasındaki farkı; domain, DNS, SSL, e-posta, veritabanı, dosya, yedek ve güvenlik işlevleriyle birlikte açıklayan başlangıçtan ileri seviyeye rehber.

11 May 2026
Sunucu, DNS, TLS, yedekleme ve dağıtım katmanlarından oluşan barındırma altyapısı
DevOps, Sunucu, Bulut ve Dağıtım 23.05.2026

AlmaLinux Üzerine cPanel ve WHM Kurulumu

Temiz AlmaLinux sunucuda hostname, statik IP, lisans, ağ, disk, DNS ve güvenlik ön koşullarından ilk WHM yapılandırmasına kadar cPanel kurulum rehberi.

23 May 2026
Sunucu, DNS, TLS, yedekleme ve dağıtım katmanlarından oluşan barındırma altyapısı
DevOps, Sunucu, Bulut ve Dağıtım 10.06.2026

Docker Compose Production Mimarisi

Docker Compose uygulamalarında production override, immutable image, secret, healthcheck, network, volume, log, backup ve yeniden başlatma politikası rehberi.

10 Haz 2026
Sunucu, DNS, TLS, yedekleme ve dağıtım katmanlarından oluşan barındırma altyapısı
DevOps, Sunucu, Bulut ve Dağıtım 29.04.2026

cPanel DNS, AutoSSL ve E-posta Ayarları

cPanel üzerinde A, AAAA, CNAME, MX, SPF, DKIM, DMARC, AutoSSL ve HTTPS yönlendirmesini çakışmasız ve doğrulanabilir kurma rehberi.

29 Nis 2026
Sunucu, DNS, TLS, yedekleme ve dağıtım katmanlarından oluşan barındırma altyapısı
DevOps, Sunucu, Bulut ve Dağıtım 25.07.2026

Production Rollback Planı Nasıl Hazırlanır?

Uygulama, veritabanı, yapılandırma ve statik dosya değişiklikleri için ölçülebilir tetikleyici, sorumlu, süre ve doğrulama adımı içeren rollback planı.

25 Tem 2026