Nginx ile Statik Site Yayınlama: Temel Yapılandırma ve Performans Odaklı İpuçları
Nginx kullanarak statik web sitelerinizi nasıl güvenli, hızlı ve hatasız bir şekilde yayınlayacağınızı adım adım öğrenin. Gerçek dünya senaryolarına uygun yapılandırma rehberi.
Caner Serbest
Sistem ve Altyapı
4 min read
Nginx ile Statik Site Yayınlama: Temel Yapılandırma ve Performans Odaklı İpuçları
Web geliştirme sürecinin belki de en tatmin edici aşamalarından biri, yerelde kusursuz çalışan projenin nihayet canlıya alınmasıdır. Özellikle HTML, CSS ve JavaScript gibi derlenmiş veya ham dosyalardan oluşan statik siteler; hız, güvenlik ve kaynak tüketimi açısından modern webin omurgasını oluşturur. Bir projeyi son kullanıcıyla buluştururken en çok tercih edilen araçların başında ise hafifliği, kararlılığı ve olay odaklı (event-driven) mimarisiyle öne çıkan Nginx gelir.
Bu rehberde, bir Linux sunucu üzerinde Nginx kullanarak statik bir web sitesini sıfırdan nasıl yayınlayacağınızı, sanal host (server block) mantığını, SSL sertifikası entegrasyonunu ve üretim ortamında (production) performans artırıcı temel optimizasyonları ele alacağız.
1. Nginx Kurulumu ve Temel Servis Yönetimi
İşe, hedef Linux dağıtımı üzerinde Nginx paket yöneticisi aracılığıyla kurarak başlıyoruz. Bu örnekte yaygın olarak kullanılan Ubuntu / Debian ailesini baz alacağız.
# Paket listesini güncelleyin
sudo apt update
# Nginx kurulumunu gerçekleştirin
sudo apt install nginx -y
Kurulum tamamlandıktan sonra Nginx servsinin arka planda çalışıp çalışmadığını kontrol etmek ve sistem açılışında otomatik başlamasını sağlamak gerekir:
# Servis durumunu kontrol etme
sudo systemctl status nginx
# Servisi başlatma ve aktif etme
sudo systemctl enable --now nginx
Tarayıcınıza sunucunuzun IP adresini girdiğinizde standart “Welcome to nginx!” sayfasını görüyorsanız, temel kurulum başarıyla tamamlanmış demektir.
2. Dizin Yapısı ve Dosya Konumlandırma
Nginx, varsayılan olarak web dosyalarını /var/www/html dizini altında sunar. Ancak birden fazla site barındırmayı planlıyorsanız veya düzenli bir yönetim istiyorsanız, her proje için ayrı bir dizin yapısı oluşturmak en iyi uygulamadır (best practice).
Örnek olarak siteadi.com adında bir alan adımız olduğunu varsayalım:
# Proje için web kök dizini oluşturma
sudo mkdir -p /var/www/siteadi.com/html
Dosya izinleri, sunucu güvenliği açısından kritik öneme sahiptir. Nginx’in dosyaları okuyabilmesi için doğru kullanıcı yetkilerini atamalıyız. Genellikle Nginx süreçleri www-data kullanıcısı altında çalışır:
# Sahipliği Nginx kullanıcısına devretme
sudo chown -R $USER:$USER /var/www/siteadi.com/html
# Okuma izinlerini ayarlama
sudo chmod -R 755 /var/www/siteadi.com
Test amacıyla dizin içerisine basit bir index.html dosyası bırakalım:
echo "<!DOCTYPE html><html><head><title>Merhaba Nginx</title></head><body><h1>Statik Sitem Yayında!</h1></body></html>" > /var/www/siteadi.com/html/index.html
3. Server Block (Sanal Host) Yapılandırması
Nginx üzerinde her web sitesi için ayrı bir konfigürasyon dosyası oluşturulur. Bu dosyalar /etc/nginx/sites-available/ dizininde saklanır ve canlıya alınmak istenenler /etc/nginx/sites-enabled/ dizinine sembolik bağ (symlink) ile bağlanır.
Yeni bir yapılandırma dosyası oluşturalım:
sudo nano /etc/nginx/sites-available/siteadi.com
Dosya içerisine aşağıdaki temel ve kararlı şablonu ekleyin:
server {
listen 80;
listen [::]:80;
root /var/www/siteadi.com/html;
index index.html index.htm;
server_name siteadi.com www.siteadi.com;
access_log /var/log/nginx/siteadi.com.access.log;
error_log /var/log/nginx/siteadi.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}
Bu yapılandırmanın temel taşları şunlardır:
listen 80;: Sunucunun HTTP üzerinden gelen istekleri dinleyeceğini belirtir.root: Web sitesi dosyalarının sunucuda fiziksel olarak bulunduğu konumdur.server_name: Bu konfigürasyonun hangi alan adlarına yanıt vereceğini tanımlar.try_files $uri $uri/ =404;: İstenen dosya veya dizin bulunamazsa doğrudan 404 hatası döndürür.
Konfigürasyonu aktif hale getirmek için sembolik bağ oluşturalım:
sudo ln -s /etc/nginx/sites-available/siteadi.com /etc/nginx/sites-enabled/
Eğer /etc/nginx/sites-enabled/default adında varsayılan bir dosya varsa, çakışmaları önlemek için bunu kaldırabilirsiniz.
4. Konfigürasyon Testi ve Servisi Yeniden Başlatma
Herhangi bir konfigürasyon değişikliği sonrasında Nginx’i yeniden başlatmadan önce mutlaka syntax testi yapmalısınız. Bu, olası yazım hatalarının servisi tamamen çökertmesini engeller.
# Syntax testi
sudo nginx -t
Eğer çıktıda syntax is ok ve test is successful ibarelerini görüyorsanız, servisi güvenle yeniden başlatabilirsiniz:
sudo systemctl reload nginx
5. SSL / TLS Entegrasyonu (Let’s Encrypt ile HTTPS)
Günümüzde HTTP üzerinden yayın yapmak hem güvenlik hem de arama motoru optimizasyonu (SEO) açısından kabul edilemez bir durumdur. Certbot aracılığıyla ücretsiz ve otomatik bir SSL sertifikası (Let's Encrypt) kuralım.
# Certbot ve Nginx eklentisini kurma
sudo apt install certbot python3-certbot-nginx -y
# Sertifika alma ve otomatik Nginx entegrasyonu
sudo certbot --nginx -d siteadi.com -d www.siteadi.com
Sihirbaz, e-posta adresinizi onaylamanızı ve HTTP trafiğini otomatik olarak HTTPS’e yönlendirip yönlendirmek istemediğinizi soracaktır. Yönlendirme seçeneğini (Redirect) seçmek en güvenli yaklaşımdır.
Certbot, arka planda Nginx konfigürasyon dosyanızı otomatik olarak güncelleyecek ve SSL sertifikasının yenilenmesi (renewal) için gerekli olan cron/systemd timer görevlerini sisteme tanımlayacaktır.
6. Performans ve Güvenlik Odaklı İpuçları
Statik site yayınlarken sunucu kaynaklarını en verimli şekilde kullanmak ve sayfa yükleme sürelerini minimuma indirmek için Nginx konfigürasyonunu biraz daha ileri taşıyabiliriz.
Gzip Sıkıştırma
Metin tabanlı varlıkların (HTML, CSS, JS, SVG) sıkıştırılarak gönderilmesi bant genişliği tasarrufu sağlar.
/etc/nginx/nginx.conf dosyasının http bloğu içinde (veya ayrı bir yapılandırma dosyasında) şu ayarların aktif olduğundan emin olun:
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml application/javascript;
gzip_disable "MSIE [1-6]\.";
Tarayıcı Önbellekleme (Browser Caching)
Statik görsellerin, yazı tiplerinin ve kod dosyalarının tarayıcıda saklanması, tekrar eden ziyaretlerde sunucu yükünü ciddi oranda düşürür. Server block içerisindeki server bloğuna şu kuralı ekleyebilirsiniz:
location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
Gereksiz Başlıkların Gizlenmesi
Nginx sürüm bilgisinin HTTP yanıt başlıklarında (Server header) görünmesi güvenlik taramalarında bilgi sızıntısına yol açabilir. Bunu engellemek için /etc/nginx/nginx.conf dosyasındaki http bloğuna şunu ekleyin:
server_tokens off;
Sonuç
Nginx ile statik bir siteyi yayınlamak, doğru adımlar izlendiğinde oldukça hızlı ve sürdürülebilir bir süreçtir. Doğru dizin izinleri, temiz bir server block yapısı, güncel bir SSL sertifikası ve temel performans optimizasyonları ile projeleriniz hem güvenli hem de yüksek performanslı bir altyapıya kavuşacaktır. Sunucu yönetimi, sürekli pratik yaparak ve log dosyalarını düzenli inceleyerek ustalaşılan bir alandır; bu nedenle kurduğunuz yapıyı test etmekten ve hata ayıklama (debugging) loglarını incelemekten çekinmeyin.
Bu yazı Gemini ile otomatik oluşturulmuştur.