Nginx

Nginx Web Dizinlerini Parola ile Koruma

Nginx Web Dizinlerini Parola ile Koruma

Evet arkadaşlar, bir proje geliştiriyorsunuz. Ya yapım aşamasında yada size özel olmasını istiyorsunuz ve kimsenin erişmesini istemiyorsunuz. Bu durumda yazılıma genel bi şifre koyup koruma sağlayabilirsiniz.

Şimdi eğer böyle birşeye ihtiyacınız var ise Nginx üzerinden bunu nasıl yapmanız gerektiğini en basit ve açıklayıcı bir yol ile anlatacağım.

Gereksinimler

Bu öğreticideki adımları tamamlamak için bunlara sahip olmanız gerekir;

 

  • Nginx web sunucusu yüklü olması gerekmekte

  • Sunucuya kök erişiminizin olması lazım.

1. Adım: Kullanıcı ve Şifre Oluşturma

Normal şartlarda bunu yapmak için, apache ile gelen “htpasswd” adlı programı kullanarak yapabiliriz. Ancak bir kac kere kullanılacak bir işlem için, bunu kurmaya gerek olmadığından, en temiz yolunu anlatacağım. Yani .htpasswd dosyasını elle oluşturacağız.

 

  1. Crypt ile Şifre Oluşturma

 

Şifre oluştururken bizden bir adett şifre ve bir salt-hash istemektedir. Şifreniz ile bu değer birleştirilip yeni bir şifre oluşacak. Bu şifre ile güvenli erişim sağlanacak, birisi şifre dosyasını okusa da şifrenizi bilemeyecek.

$ perl -le 'print crypt("şifren", "anahtar key")'

Yani Daha İnsalcıl yazarsak;

$ perl -le 'print crypt("123123", "qwe!qwe")'

Örnek Çıktı :

[email protected] ~ % perl -le 'print crypt("123123", "qwe!qwe")'
qws91OF/xTcTE

 

Yukarıda örnekteki gibi yer alan qws91OF/xTcTE ‘ı kopyalayalım  (Benim şifrem yerine kendi şifrenizi yazdığınızda sonuc farklı olacaktır.) ve devam edelim.

 

  1. Şifremizi ve Kullanıcı Adını Tanıtma

Arkadaşlar burada şifrelenmiş datayı hosting in içerisinde bir yere yapıştıracağım, ancak sizde dosya yolları farklı olabilir. Eğer özel bir hosting yönetim aracı ile bir hosting yarattınız  ise genelde “/home/hosting_adiniz/“ şeklindedir. Elle yarattınız ise zaten yerini biliyorsunuzdur.

 

Ben dosyayı oluşturmak için vim editörünü kullanacağım,  istiyorsanız nono gibi başka bir programa hakimseniz, onuda kullanabilirsiniz.

Dosyamızın adı “.htpasswd” olacak. içerisine “kullanıcı_adınız:hash” şeklinde text veri olacak

vim /home/programyazarCOM/.htpasswd
onurtez:qws91OF/xTcTE

 

Yazıp kaydediyoruz. Kaydetmek için “ESC” ve “:wq” ye basıyoruz.

2. Adım: Nginx Config Ayarları

Evet işin çoğu kısmı bitti. Şuan artık Nginx Web serverine, bu hostu açarken bi şire sor ve kontrol et, doğruysa aç demesini öğreteceğiz. Tabiki bunu yapmak için Nginx’in o hosting için oluşturduğu dosyaya ulaşacağız. Şimdi yine bu dosyanın sabit bir yeri yok! öncelikle bunu söyleyeyim. Sonra yok efendim sen bilmiyorsun, aradık bulamadık bu fake demeyin. Genelde “etc/nginx/sites-enabled” veya bunu anlamak için “nginx -V” komutunu kullanın “--conf-path=” altında yazması lazım.

 

Evet dosya yolunu da bulduk config dosyalarına bir göz atın. Göz atmak için o dosya içindeyken bi ll ls olarak iki komutu deneyin dosya isminden zaten anlarsınız.

Nginx Web Dizinlerini Parola ile Koruma

Config Dosya Çıktılarına Bir Örnek

 

Yukarıda örneği karalamak zorunda kalıyorum, ticari projelerim olmasından dolayı, öncelikle bunun için özür dilerim ancak buna benzer bir ekran ile karşılamanız lazım. Ben elle oluşturduğum için bu dosyaları, terminal üzerinden elimle yarattığım için neyin ne olduğunu biliyorum. Eğer olası bir yönetim aracı kullanıyorsanız, genelde domain adınız ile oluşmuştur.

$ cd /etc/nginx/sites-enabled/programyazar

Örnek Çıktı :

server {
        listen 80;
        server_name programyazar.com, www.programyazar.com;
         root /home/programyazarCOM;

        index index.php index.html index.htm index.nginx-debian.html;

        location /static {
                alias /home/programyazarCOM/static;
        }


        location / {
            include proxy_params;
                proxy_pass http://127.0.0.1:9131;
        }

}

Açılan ayar dosyası, ortalama olarak yukarıdaki yapıya benzer bir yapıdadır. Yazılım diline göre veya gereksinimlere göre ayar dosyası  değişiklik gösterebilir. Ben en baz şekilde anlamanız için kendi Config ayar dosyamı koymadım :). Ama bizim kullandığımız alan en baş betiklerde olduğu için hemen kafanız karışmasın.

server_name programyazar.com, www.programyazar.com;

hemen altın ekleyim

auth_basic "Administrator Login";
auth_basic_user_file /home/programyazarCOM/.htpasswd;

Örnek Çıktı : 

server {
        listen 80;
        server_name programyazar.com, www.programyazar.com;
        auth_basic "Administrator Login";
        auth_basic_user_file /home/programyazarCOM/.htpasswd;
        root /home/programyazarCOM;

        index index.php index.html index.htm index.nginx-debian.html;

        location /static {
                alias /home/programyazarCOM/static;
        }


        location / {
            include proxy_params;
                proxy_pass http://127.0.0.1:9131;
        }

}

Evet ayarlarımızı kaydediyoruz. Kaydetmek için “ESC” ve “:wq” ye basıyoruz. Not : Arkadaşlar üstteki örnekte sadece 80 portuna gelen isteği yaptık. Eğer HTTPS kullanıyorsanız alt kısımda aynı ayar komutlarının devamı olduğunu göreceksiniz. 443 portuna da aynı ayarları yapmanız gerekmektedir. Aksi takdirde 80 (http://) portunuz şifreli 443 (https://)  porunuz şifresiz olacaktır.

 

Bu aşamadan sonra yapmanız gereken Nginx i yeniden başlatmak .

$ systemctl restart nginx
Veya
$ service nginx restart

Ancak yeniden başlatmadan önce “nginx -t “ile config dosyalarınızda hata varmı kontrol edin. Nginx hakkında daha başka yararlı bilgiler için lütfen bu konulara da göz atın.

Tebrikler mutlu son, artık Nginx sayesinde web dizininizi parola ile korunuyor. Bu ayarı kaldırmak için Nginx den eklediğiniz 2 satır kodu kaldırmanız veya yorum satırı yapmanız yeterlidir. Yorum satısı yapmak için kodun başına “#” işareti koyun.

#auth_basic "Administrator Login";
#auth_basic_user_file /home/programyazarCOM/.htpasswd;