Takip et

Nginx’i Ubuntu 22.04 Üzerinde Özel Hata Sayfaları Kullanacak Şekilde Yapılandırma

Nginx’i Ubuntu 22.04 Üzerinde Özel Hata Sayfaları Kullanacak Şekilde Yapılandırma Web sunucuları, çeşitli nedenlerle bir isteği işleyemedi

Nginx’i Ubuntu 22.04 Üzerinde Özel Hata Sayfaları Kullanacak Şekilde Yapılandırma

Web sunucuları, çeşitli nedenlerle bir isteği işleyemediğinde veya istenen kaynağı bulamadığında standart hata mesajları döndürür. Bu varsayılan hata sayfaları genellikle sade, markasız ve kullanıcı dostu değildir. Kullanıcı deneyimini iyileştirmek, marka kimliğini korumak ve potansiyel güvenlik açıklarını azaltmak için özel hata sayfaları kullanmak kritik öneme sahiptir. Bu makalede, Nginx web sunucusunu Ubuntu 22.04 işletim sistemi üzerinde özel hata sayfalarını gösterecek şekilde nasıl yapılandıracağınızı adım adım detaylı bir şekilde inceleyeceğiz. Hedefimiz, hem teknik uygulamanın inceliklerini anlamak hem de bu özelliğin sunduğu avantajları en iyi şekilde değerlendirmektir.

Özel Hata Sayfaları Neden Önemlidir?

Özel hata sayfaları sadece estetik bir tercih olmanın ötesinde, bir dizi önemli fayda sunar:

* Gelişmiş Kullanıcı Deneyimi: Varsayılan, genellikle kafa karıştırıcı hata mesajları yerine, kullanıcılara ne olduğunu açıklayan ve sitenin diğer bölümlerine yönlendiren dostça bir sayfa sunmak, hayal kırıklığını azaltır ve sitenizde kalmalarını teşvik eder.
* Marka Tutarlılığı: Özel hata sayfaları, web sitenizin genel tasarımı ve markalama öğeleriyle uyumlu olabilir. Bu, kullanıcıların sitenizin bir parçası olduğunu hissetmelerini sağlar ve profesyonel bir imaj yaratır.
* SEO İyileştirmeleri: Özellikle 404 (Bulunamadı) hataları için, kullanıcılara ilgili sayfalar veya ana sayfa bağlantıları sunmak, hemen çıkma oranlarını azaltabilir ve arama motoru sıralamalarını dolaylı olarak etkileyebilir.
* Güvenlik: Varsayılan hata sayfaları bazen sunucu yazılımı sürümü gibi hassas bilgileri ifşa edebilir. Özel hata sayfaları ile bu tür bilgilerin açığa çıkmasını engelleyebilirsiniz.
* Analiz ve Takip: Özel hata sayfalarına yerleştirilen analiz kodları (örneğin, Google Analytics), hangi hata sayfalarının ne sıklıkta görüntülendiğini takip etmenize olanak tanır. Bu, sitenizdeki kırık bağlantıları veya sunucu sorunlarını tespit etmenize yardımcı olabilir.

Nginx Hata Yönetimine Genel Bakış

Nginx, error_page direktifi aracılığıyla hata sayfalarını yapılandırmanıza olanak tanır. Bu direktif, belirli HTTP durum kodlarına karşılık gelen özel sayfaları veya URL’leri tanımlamanızı sağlar. Nginx, bir hata oluştuğunda bu direktifi kontrol eder ve yapılandırmaya göre uygun hata sayfasını sunar.

error_page direktifi, http, server veya location bağlamlarında kullanılabilir. Bu, hata sayfalarının kapsamını global olarak (tüm sunucular için), belirli bir sanal sunucu için veya belirli bir URL yolu için özelleştirebileceğiniz anlamına gelir.

Ön Koşullar

Bu rehbere başlamadan önce aşağıdaki maddelerin hazır olduğundan emin olun:

* Ubuntu 22.04 çalıştıran bir sunucu veya sanal makine.
* Nginx web sunucusu kurulu ve çalışır durumda. Henüz kurulu değilse, aşağıdaki komutlarla kurabilirsiniz:

sudo apt update
    sudo apt install nginx
    sudo systemctl enable nginx
    sudo systemctl start nginx

* sudo ayrıcalıklarına sahip bir kullanıcı hesabı.
* Temel terminal ve Linux komut bilgisi.
* Tercih edilen bir metin düzenleyici (nano, vim vb.).

Adım 1: Özel Hata Sayfalarını Oluşturma

İlk adım, özel hata sayfalarınızın HTML dosyalarını oluşturmaktır. Bu dosyalar, kullanıcılara gösterilecek içeriği barındıracaktır. Bu dosyaları /etc/nginx/errors gibi merkezi bir dizinde veya web sitenizin kök dizini içinde (örneğin, /var/www/html/errors) tutabilirsiniz. Merkezi bir dizin, birden fazla site için aynı hata sayfalarını kullanmanızı kolaylaştırır.

Biz bu rehberde /etc/nginx/errors dizinini kullanacağız.

1. Hata Sayfaları Dizini Oluşturma:

sudo mkdir -p /etc/nginx/errors

2. Özel Hata Sayfalarını Oluşturma:
Yaygın HTTP hata kodları için (404 Not Found, 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, 504 Gateway Timeout, 403 Forbidden) HTML dosyaları oluşturalım.

Örnek 404.html dosyası:

sudo nano /etc/nginx/errors/404.html

İçeriği aşağıdaki gibi ekleyin (içeriği kendi markanıza ve tasarımınıza göre özelleştirebilirsiniz):


    
    
        
        
        404 - Sayfa Bulunamadı
        
    
    
        

Sayfa Bulunamadı

Üzgünüz, aradığınız sayfa bulunamadı. Bağlantının yanlış yazılmış olabileceğini veya sayfanın taşınmış ya da kaldırılmış olabileceğini lütfen kontrol edin.

Anasayfaya dönmek için buraya tıklayın.

Veya destek ekibimizle iletişime geçin.

Dosyayı kaydedin ve kapatın (nano için Ctrl+O, Enter, Ctrl+X).

Örnek 50x.html dosyası (tüm 5xx hataları için):
Çoğu 5xx hatası için benzer bir mesaj kullanabiliriz. Bu, yönetimi basitleştirir.

sudo nano /etc/nginx/errors/50x.html

İçeriği aşağıdaki gibi ekleyin:


    
    
        
        
        Sunucu Hatası
        
    
    
        

Bir şeyler ters gitti!

Üzgünüz, sunucumuzda beklenmedik bir hata oluştu. Lütfen daha sonra tekrar deneyin.

Sorun devam ederse, destek ekibimizle iletişime geçin.

Anasayfaya dönmek için buraya tıklayın.

Dosyayı kaydedin ve kapatın.

Benzer şekilde, 403.html (Yasaklandı) için de bir sayfa oluşturabilirsiniz:

sudo nano /etc/nginx/errors/403.html

    
    
        
        
        403 - Yasaklandı
        
    
    
        

Erişim Yasaklandı

Bu kaynağa erişim izniniz yok. Lütfen kullanıcı adınız ve şifrenizle giriş yaptığınızdan emin olun veya yöneticinizle iletişime geçin.

Anasayfaya dönmek için buraya tıklayın.

Dosya İzinlerini Ayarlama:
Nginx’in bu dosyalara erişebildiğinden emin olmak için izinleri kontrol etmek iyi bir uygulamadır. Genellikle Nginx www-data kullanıcısı altında çalışır.

sudo chown -R www-data:www-data /etc/nginx/errors
    sudo chmod -R 644 /etc/nginx/errors/*.html

Adım 2: Nginx Konfigürasyonunu Düzenleme

Şimdi Nginx’e bu özel hata sayfalarını ne zaman ve nasıl kullanacağını söylemeliyiz. Bu, genellikle sitenizin sunucu bloğu (/etc/nginx/sites-available/default veya özel bir site yapılandırma dosyası) içinde yapılır.

1. Nginx Yapılandırma Dosyasını Açma:
Varsayılan yapılandırma dosyasını düzenleyelim:

sudo nano /etc/nginx/sites-available/default

Eğer kendi özel site yapılandırma dosyanız varsa, onu açın (örneğin /etc/nginx/sites-available/example.com).

2. Sunucu Bloğu İçinde Özel Hata Sayfalarını Tanımlama:
server bloğu içine error_page direktiflerini ve hata sayfalarını sunmak için bir location bloğu ekleyeceğiz. Bu location bloğu, hata sayfalarının doğrudan erişimini engellemek için internal direktifini kullanacaktır.

server bloğunuzun içine (genellikle root direktifinden sonra veya location / bloğunun dışında) aşağıdaki satırları ekleyin:

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html; # Sitenizin kök dizini
        index index.html index.htm index.nginx-debian.html;
        server_name _;

        # Özel hata sayfaları tanımlaması
        error_page 403 /403.html;
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html; # Birden fazla hata kodu için tek sayfa

        # Hata sayfalarının bulunduğu konumu tanımla ve doğrudan erişimi engelle
        location = /403.html {
            root /etc/nginx/errors;
            internal;
        }
        location = /404.html {
            root /etc/nginx/errors;
            internal;
        }
        location = /50x.html {
            root /etc/nginx/errors;
            internal;
        }

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

        # Diğer Nginx yapılandırmalarınız...
    }

Açıklamalar:

* error_page 404 /404.html;: Nginx’e bir 404 hatası oluştuğunda, isteği dahili olarak /404.html URL’sine yönlendirmesini söyler.
* error_page 500 502 503 504 /50x.html;: Birden fazla 5xx hata kodu için aynı özel hata sayfasını kullanır.
* location = /404.html { ... }: Bu location bloğu, Nginx’in dahili olarak yönlendirdiği /404.html gibi hata sayfalarını nasıl işleyeceğini tanımlar.
* root /etc/nginx/errors;: Bu location bloğu için kök dizininin /etc/nginx/errors olduğunu belirtir. Yani, Nginx /404.html istediğinde, /etc/nginx/errors/404.html dosyasını arayacaktır.
* internal;: Bu çok önemli bir direktiftir. Bu, Nginx’in bu location bloğu tarafından işlenen dosyalara yalnızca dahili alt istekler (yani error_page direktifi gibi Nginx’in kendi mekanizmaları tarafından yapılan istekler) aracılığıyla erişilmesine izin verdiği anlamına gelir. Kullanıcılar doğrudan http://example.com/404.html adresine giderek bu hata sayfalarına erişemezler. Bu, güvenlik ve doğru HTTP durum kodu sağlamak için önemlidir.

3. HTTP Bloğu İçinde Global Hata Sayfalarını Tanımlama (Opsiyonel):
Eğer tüm sanal sunucularınız için aynı hata sayfalarını kullanmak istiyorsanız ve her server bloğuna ayrı ayrı eklemek istemiyorsanız, error_page direktiflerini /etc/nginx/nginx.conf dosyasındaki http bloğuna ekleyebilirsiniz. Ancak, location blokları genellikle her server bloğunda tanımlanmalıdır, çünkü root direktifi sunucuya veya konuma özel olabilir.

# /etc/nginx/nginx.conf dosyasında
    http {
        # ... diğer http ayarları ...

        error_page 403 /403.html;
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;

        # location blokları genellikle server bloğunda daha spesifik olarak tanımlanır.
        # Global location tanımlamak genellikle karmaşıklığa yol açabilir.
        # Eğer hata sayfaları her sitenin kendi kök dizinindeyse, bu yaklaşım işe yarayabilir.
        # Ancak, hata sayfalarını merkezi bir dizinde tutuyorsak, her server bloğunda
        # özel location tanımlamak daha güvenli ve esnektir.

        # ...
    }

Bizim senaryomuzda, hata sayfalarını /etc/nginx/errors gibi merkezi bir konumda tuttuğumuz için, server bloğu içinde location tanımlamak daha uygun ve yaygın bir yaklaşımdır.

Adım 3: Nginx Konfigürasyonunu Test Etme

Yapılandırma dosyasında herhangi bir sözdizimi hatası olup olmadığını kontrol etmek çok önemlidir.

sudo nginx -t

Eğer her şey yolundaysa, aşağıdaki gibi bir çıktı görmelisiniz:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Herhangi bir hata mesajı alırsanız, hatanın ne olduğunu dikkatlice okuyun ve yapılandırma dosyanızdaki ilgili satırı düzeltin.

Adım 4: Nginx’i Yeniden Başlatma

Yapılandırma değişikliklerinin etkili olması için Nginx hizmetini yeniden başlatmanız gerekir.

sudo systemctl restart nginx

Nginx’in başarılı bir şekilde yeniden başlatıldığından emin olmak için durumunu kontrol edebilirsiniz:

sudo systemctl status nginx

Çıktıda active (running) ibaresini görmelisiniz.

Adım 5: Özel Hata Sayfalarını Test Etme

Şimdi özel hata sayfalarınızın doğru çalışıp çalışmadığını test edelim.

1. 404 Hatasını Test Etme:
Tarayıcınızda web sitenizin adresine gidin ve var olmayan bir URL yazın (örneğin, http://your_domain_or_ip/non-existent-page.html). Özel 404 sayfanızı görmelisiniz.

2. 50x Hatalarını Test Etme (Opsiyonel):
5xx hatalarını doğrudan tetiklemek, genellikle bir arka uç uygulamasının veya veritabanının durdurulmasını gerektirdiğinden biraz daha karmaşıktır. Ancak, Nginx’in bir ters proxy olarak çalıştığı bir senaryoda bu hataları test edebilirsiniz.

Örneğin, Nginx’i bir proxy_pass ile çalışmayan bir adrese yönlendirerek 502 (Bad Gateway) hatasını tetikleyebilirsiniz. Geçici olarak server bloğunuza aşağıdaki gibi bir location ekleyebilirsiniz:

location /test502 {
        proxy_pass http://127.0.0.1:9999; # Çalışmayan bir port
        proxy_intercept_errors on; # Nginx'in arka uç hatalarını yakalamasını sağlar
    }

Nginx’i yeniden başlattıktan sonra http://your_domain_or_ip/test502 adresine giderseniz, özel 50x sayfanızı görmelisiniz. Test bittikten sonra bu location bloğunu kaldırmayı unutmayın.

Tarayıcı Geliştirici Araçlarını Kullanma:
Hata sayfasını gördüğünüzde, tarayıcınızın geliştirici araçlarını (F12) açın ve “Network” sekmesini kontrol edin. Sayfanın HTTP durum kodunun gerçekten 404 (veya 500, 502 vb.) olduğundan emin olun. internal direktifi sayesinde, Nginx özel hata sayfasını sunarken orijinal hata kodunu koruyacaktır.

Gelişmiş Konular ve En İyi Uygulamalar

Nginx’in özel hata sayfaları yapılandırması oldukça esnektir. İşte daha gelişmiş senaryolar ve en iyi uygulamalar:

H3: Özel Hata Sayfalarında Dinamik İçerik ve Uygulama Entegrasyonu

Bazen basit HTML dosyaları yeterli olmayabilir. Örneğin, hata sayfasında bir arama formu göstermek veya hata ayrıntılarını bir veritabanına kaydetmek isteyebilirsiniz. Bu durumda, hata sayfalarını bir arka uç uygulaması (PHP, Python, Node.js) tarafından dinamik olarak oluşturulacak şekilde yapılandırabilirsiniz.

server {
    # ...
    error_page 404 =200 /index.php?error=404; # =200 orijinal durumu korur veya değiştirir
    error_page 500 502 503 504 =500 /index.php?error=500;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # PHP-FPM soket yolunuz
        fastcgi_intercept_errors on; # PHP'nin hataları yakalamasını sağlar
    }

    # ...
}

* =200: Bu, Nginx’in hata sayfası için HTTP durum kodunu 200 OK olarak değiştirmesini sağlar. Bu, arama motorlarının 404 sayfasını indekslemesini önlemek için “soft 404” durumlarında kullanılabilir, ancak genellikle orijinal hata kodunu korumak daha iyidir (=404 veya hiç belirtmeyin). Eğer durum kodunu korumak istiyorsanız, sadece /index.php?error=404; kullanın.
* fastcgi_intercept_errors on;: Bu direktif, FastCGI sunucusundan gelen hataların Nginx tarafından yakalanmasını ve error_page direktifleriyle işlenmesini sağlar.

H3: Güvenlik Hususları

* internal Direktifi: Daha önce de belirtildiği gibi, internal direktifi hata sayfalarının doğrudan URL üzerinden erişilmesini engeller. Bu, kötü niyetli kullanıcıların sunucu yapılandırmanız hakkında bilgi toplamalarını zorlaştırır.
* Hassas Bilgilerin Gizlenmesi: Özel hata sayfalarınızda sunucu yazılımı sürümü, veritabanı hataları veya dosya yolları gibi hassas bilgileri asla ifşa etmeyin. Genel ve kullanıcı dostu mesajlar kullanın.
* Loglama: Nginx hata günlüklerini (/var/log/nginx/error.log) düzenli olarak kontrol edin. Bu, sunucunuzdaki sorunları tespit etmenize ve gidermenize yardımcı olur.

H3: SEO ve Kullanıcı Deneyimi İçin İpuçları

* Net ve Yardımcı Mesajlar: Hata sayfasındaki metin, kullanıcının ne olduğunu anlamasına ve bir sonraki adımı atmasına yardımcı olmalıdır. Örneğin, “Sayfa bulunamadı. Belki ana sayfamıza gitmek istersiniz?” gibi.
* Navigasyon Bağlantıları: Kullanıcıları sitenizin diğer önemli bölümlerine (ana sayfa, iletişim, site haritası) yönlendiren bağlantılar ekleyin.
* Marka Kimliği: Hata sayfalarınızı sitenizin genel tasarımı ve renk şemasıyla uyumlu hale getirin.
* “Soft 404″lerden Kaçınma: Bir 404 hatası oluştuğunda, Nginx’in gerçekten 404 HTTP durum kodunu döndürdüğünden emin olun. Eğer 200 OK döndürürseniz, arama motorları bu sayfayı geçerli bir sayfa olarak indeksleyebilir ve bu da SEO’nuza zarar verebilir. error_page 404 /404.html; varsayılan olarak 404 durum kodunu korur.

H3: Nginx Reverse Proxy ve Backend Hataları

Eğer Nginx’i bir ters proxy olarak kullanıyor ve arka uç sunuculardan gelen hataları yakalamak istiyorsanız, proxy_intercept_errors on; direktifini kullanmanız gerekir.

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_app; # Arka uç sunucunuz
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_intercept_errors on; # Arka uçtan gelen hataları yakala

        error_page 403 /403.html;
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
    }

    # Hata sayfaları için location blokları (yukarıdaki gibi)
    location = /403.html {
        root /etc/nginx/errors;
        internal;
    }
    location = /404.html {
        root /etc/nginx/errors;
        internal;
    }
    location = /50x.html {
        root /etc/nginx/errors;
        internal;
    }
}

Bu yapılandırma ile, arka uç uygulamanız 500, 502 gibi bir hata döndürdüğünde Nginx bu hatayı yakalayacak ve özel 50x.html sayfanızı gösterecektir.

Sorun Giderme

* nginx -t Hatası: Yapılandırma dosyanızda bir sözdizimi hatası varsa, bu komut size hatanın yerini ve türünü söyleyecektir. Hata mesajını dikkatlice okuyun.
* Nginx Yeniden Başlatılamıyor: sudo systemctl status nginx komutu ile hatanın nedenini kontrol edin. Genellikle yapılandırma hataları veya port çakışmalarıdır.
* Özel Hata Sayfaları Görünmüyor:
* Dosya Yolları: error_page direktifindeki ve location bloğundaki dosya yollarının doğru olduğundan emin olun (root direktifiyle birlikte).
İzinler: Nginx kullanıcısının (genellikle www-data) hata sayfalarına okuma iznine sahip olduğundan emin olun (sudo chmod 644 /etc/nginx/errors/.html).
* internal Direktifi: internal direktifi doğru yerleştirilmiş mi? Hata sayfalarına doğrudan erişim engellenmiş mi?
* Önbellek (Cache): Tarayıcınızın veya CDN’nizin önbelleğini temizlemeyi deneyin. Bazen eski hata sayfaları önbellekte kalabilir.
* Çakışan location Blokları: Nginx’in istekleri işleme sırası önemlidir. Özel hata sayfaları için tanımladığınız location bloklarının diğer location bloklarıyla çakışmadığından emin olun. Özellikle = /hata.html gibi kesin eşleşme lokasyonları genellikle güvenlidir.
* Arka Uç Uygulamasından Gelen Hatalar: Eğer bir ters proxy kullanıyorsanız, proxy_intercept_errors on; direktifinin etkin olduğundan emin olun.

Sonuç

Nginx’i Ubuntu 22.04 üzerinde özel hata sayfalarını kullanacak şekilde yapılandırmak, web sitenizin kullanıcı deneyimini, marka tutarlılığını ve genel profesyonelliğini önemli ölçüde artırır. Bu makalede adım adım gösterilen talimatları ve en iyi uygulama önerilerini takip ederek, ziyaretçilerinize karşılaştıkları hatalarda bile bilgilendirici, yardımcı ve markalı bir deneyim sunabilirsiniz. Güvenli ve kullanıcı dostu bir web ortamı oluşturmak için bu yapılandırma kritik bir adımdır. Unutmayın, iyi tasarlanmış bir hata sayfası, potansiyel bir hayal kırıklığını bile olumlu bir etkileşime dönüştürebilir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.