19 Aralık 2020

nginx neden yanlış sitenin içeriğini göstermekte ısrar ediyor?

ile hasan

Sunucu ayarlarınızı yaptınız; yani Ubuntu için konuşursak /usr/share/nginx/html/orneksite dizinine dosyaları yerleştirdiniz ve /etc/nginx/conf.d‘nin altında orneksite.conf dosyası oluşturup içine sunucu adresini ve bakacağı klasörü yazdınız. Sunucuyu da service nginx restart diyerek baştan başlattınız. Geriye sadece domainin yönlendirilmesi kaldı.

#/etc/nginx/conf.d/orneksite.conf

server {
listen 80;
server_name orneksite.com www.orneksite.com;
root /usr/share/nginx/html/orneksite
...
}

Henüz domaini yönlendirmemiş olsanız da kendi bilgisayarınızda /etc/hosts dosyasına ilgili ip’yi görecek şekilde satır eklediğinizde en azından sizin bilgisayarınızda orneksite.com deyince sunucuya gidecektir.

Benim örneğimde işte problem burada başlıyor. Tarayıcı ısrarla https://orneksite.com diye gitmeye çalıştığı için yani http yerine https’i tercih ettiği için -ki site sunucuyu taşımadan önce https üzerinde çalışıyordu, cache yüzünden ısrarla https açmaya çalışıyor- sunucu üzerinde sürekli başka bir sitenin sayfasını gösteriyor. Default sayfayı da göstermiyor. Israrla sunucudaki bir başka sayfayı gösteriyor.

Bu sorunla epeydir karşılaşıyordum ama domaini yönlendirip SSL’ini ayarladıktan sonra sorun kendiliğinden çözüldüğü için üzerinde durmuyordum. Bugün bunun sebebini araştırmaya ve çözmeye karar verdim.

Bu tarz bir sorun oldugunda nginx ilginç bir şekilde conf.d klasöründeki alfabetik olarak ilk dosyanın gösterdiği siteyi açıyordu. Aslında benim örneğimde ilk değil 2. dosya idi bu. İlk dosya 0default.conf dosyası ve onu yeni bir site oluşturduğumda referans olsun diye kullanıyorum. Ne hikmetse adını 0’la başlattığım halde nginx’in onu değil de 2.sini dikkate alıyordu.

Madem öyle; ben de bir tane 404 sayfası yapayım, güzel bir tasarımı olsun. Bunu 2. sıraya gelecek şekilde ayarlayayım. nginx problem yaşadığında bunu göstersin dedim. 404.kodventure.com şeklinde bir subdomain oluşturup denedim. Sonuç: Hayır. Bu sefer 3. sıradaki dosyanın gösterdiği siteyi -yani aynısını- gösteriyor.

404’le başlıyor diye mi acaba diye abc.kodventure.com da denedim. Gene değişmedi. Sonra aradım taradım ve sebebini bu yazıda buldum.

Kısaca anlatmak gerekirse;

Nginx, eğer gelen domainle örtüşen bir ayar bulamıyorsa alfabetik olarak ilk bulduğunu gösteriyor. Evet, bu kadarını biz de anlamıştık. Ancak bizim alfabetik olarak yerleştirdiğimiz dosyaya, hatta dizindeki ilk dosya olan 0default.conf dosyasının gösterdiği yere bakmıyor da neden sonrakine -ve oraya da bir dosya yerleştirdiğimizde bu kez ücünsüsüne- bakıyor?

Sebebi yine HTTPS 🙂

Problemin kaynağı zaten başlangıçta tarayıcının ısrarla https istemesiydi. Nginx’de HTTPS ile gelen bir domaini kendi ayarlarıyla eşleştiremezse alfabetik olarak HTTPS şeklinde yapılandırılmış ilk dosyayı dikkate alıyor. Bizim konfigüasyonda 0default.conf ve sonradan ikinci sıraya gelecek şekilde eklediğim a404.conf dosyası SSL’siz çalışacak şekilde ayarlanmıştı 🙂 Fakat üçüncü sırada duran ve bir başka müşteriye ait olan dosya ise SSL’li ayarlanmıştı. O nedenle ısrarla onu gösteriyormuş meğer 🙂

Ben de hemen 404.kodventure.com’u certbot ile SSL’e çevirdim ve sorundan kurtuldum 🙂 Gerçi ben bunla boğuşurken uydurmaya çalıştığım domainin sahibi çoktan yönlendirmeyi yapmıştı. Olsun, bir şey öğrenmiş olduk 🙂