EnderUnix Software Development Team

                                                  Apache Web Sunucusunda Virtual Hosting  .htaccess ve

                                                         Dizin Erişimi Kısıtlama Konfigurasyonu (FreeBSD)

 

 

Giris

17 Mart 2001

   Apache web sunucusunda  Virtual Hosting  , Tek bir Apache web sunucusu üzerinden birden fazla domain(web alanı) için hizmet vermek amacı ile kullanılır. Bu dökümanda isme göre (Name -based) virtual hosting konfigurasyon yapılacktır . Tüm web alanları için web sunucusunda tek bir ip adresi kullanılacaktır. IP ye göre (IP -based) konfigurasyonda yapılar ama bunun için her web alanını(domain) için ayrı ayrı ip adresi tanımlanmalıdır. Bu durumda isme göre konfigurasyon yapmak daha mantıklıdır (en azından ben öyle düşünüyorum :)) ).
Genel Notlar
Bu dokumanin en guncel hali; http://www.enderunix.org/docs/apache.html adresindedir.

Aksi belirtilmedigi takdirde bu gibi dokumanlarin haklari kendilerini yazan yazarlarda saklidir. Bu dokuman da, parca parca ya da tamamen herhangi bir sekilde, yazarinin izni dahilinde dagitilabilir.

Yazar, bu dokumani okuyanlarin ugrayacaklari herhangi bir zarardan oturu sorumluluk kabul etmez. Use at your own risk!

Eger, herhangi bir konuda yardima ihtiyaciniz olursa, ismail@enderunix.org ya da roots@enderunix.org adresine mail atabilirsiniz.!

-- Ismail YENIGUL
ismailt@enderunix.org
   17 Mart, 2001

Apache kurulumu
 

Eğer Apache yi kurmadıysanız. Kısa yoldan portlardan kuralım

#cd /usr/ports/www/apache13

#make install

komutunu verdiğinizde apache yi FreeBSD sizin için kuracaktır. Burada php ssl gibi destekler verilmemistir. Bu destekleri verecekseniz Apache yi vereceginiz destege gore kurmanız gerekmektedir. Burada bu modullerin nasıl kurulacagı anlatılmayacaktır.

 

Virtual Hosting (Sanal Alan) Konfigurasyonu:
Diyelimki www.enderunix.org , www.yenigul.net ve  www.bsdlive.org siteleri  için
virtual hosting yapacagız.

Öncelike  tüm bu alanlar için  mutlaka dns kaydı yapılması lazım ve dns sunucuda bu alanların ip adresi olarak apache web suncusunun ip adresi verilmelidir.  burada apache web sunucusun ip adresi  olarak 195.1.2.4 verilecektir
 
  Sırası ile enderunix.org www.bsdlive.org için Virtual Hosting bilgilerini yazalım .FreeBSD de apache yi portlardan kurdugunuzda httpd.conf dosyası /usr/local/etc/apache dizini altındadır.

# vi /usr/local/etc/apache/httpd.conf

NameVirtualHost 195.1.2.4:80
   

# www.enderunix.org  17 Mart 001 de olusturuldu (yenigul)

<VirtualHost 195.1.2.4>
ServerAdmin yenigul@yenigul.net
DocumentRoot /usr/local/www/data/domains/enderunix
ServerName www.enderunix.org
Script Alias  /cgi-bin "/usr/local/www/data/enderunix/cgi-bin"

ErrorLog /var/log/error_enderunix.org
TransferLog /var/log/access_log_enderunix.org
</VirtualHost>

# www.bsdlive web alanı 16 Mart 2001 de olusturuldu (yenigul)

<VirtualHost 195.1.2.4>
ServerAdmin yenigul@yenigul.net
DocumentRoot /usr/local/www/data/domains/bsdlive
ServerName www.bsdlive.org

Script Alias  /cgi-bin "/usr/local/www/data/bsdlive/cgi-bin"
ErrorLog /var/log/error_bsdlive
TransferLog /var/log/access_log_bsdlive
</VirtualHost>

Şimdi Yukarıdaki ifadelerin ne demek oldugun açıklayalım.

NameVirtualHost  195.1.2.4:80

İfadesindeki;

195.1.2.4: Apache web sunucusunun ip adresi (IP  Gerçek degil Oylesine bir IP verdim) ve 80 ile de httpd port u belirtilmiştir . Bu ifadeyi httpd.conft bir defa yazmanız yeterlidir.

# ile başlayan kısımlar sadece açıklama kısmıdır, olup olmaması konfigurasyonu etkilemez .

<VirtualHost 195.1.2.4>

Bu kısımdaki ip adresi web sunucusunun ip adresi  olmalı
ServerAdmin  yenigul@yenigul.net ifadesi ile  Bu web alanının yetkili kişisinin e-mail adresini belirtir.

DocumentRoot  /usr/local/usr/local/www/data/domains/enderunix

İfadesi ile www.enderunix.org adresinin dosyalarının bulundugu yeri belirttik.

ServerName  www.enderunix.org

Adından da anlaşılacağı gibi Web alanın adı belirtildi.

Script Alias  /cgi-bin   "/usr/local/www/data/enderunix/cgi-bin"
ifadesi ile http://www.enderunix.org/cgi-bin adresine ulasmak istediklerinde bu domaina ait cgi-bin dizinin  "/usr/local/www/data/enderunix/cgi-bin" dizini oldugunu belirtir.

ErrorLog /var/log/error_enderunix.org

Bu ifade ilede bu web alanındaki hatalar(dosyaların bulunamaması , CGI hataları)   /var/log dizini altindaki  error_yenigul.net dosyasına yazılır.

TransferLog  /var/log/access_log_enderunix.org

Bu ifade ilede bu web alanına hangi ip lerden erişildiği hangi dosyalara bakıldığı gibi bilgilerin  /var/log dizini altindaki (bizim kurulumda /www//var/log ) access_log.enderunix.org dosyasına yazılacağını belirtir.

</VirtualHost>
ifadesi ile Bu alan için gerekli konfigurasyonun bittiğini belirttik.

Evet Virtual Hosting mizin sonuna geldik sayılır ama bir sorun var !!!

Bizim Apache Sunucumuzun IP adresi 195.1.2.4 idi .Diyelimki bu IP
www.yenigul.net isimli makinaya ait ve bu  adress .YENIGUL.NET web sunucu .
Şu anki konfigurasyonla  http://www.yenigul.net adresine girmek isteyen birisi www.yenigul.net yerine httpd.conf dosyasında en üstte bulunan web alanına gidecektir .Yani www.enderunix.org adresine erişecektir.

    Bu sorunu çözmek için www.yenigul.net sunucunun adı olmasına ragmen , bu alan içinde Virtual Hosting kaydı yapılmalıdır.
Aşagıdaki ifadeler yazılırsa bu sorun giderilmiş olur.
 

# www.yenigul.net Web alanı kaydı

<VirtualHost 195.1.2.4>
ServerAdmin yenigul@yenigul.net
DocumentRoot /usr/local/www/data
ServerName www.yenigul.net

ErrorLog /var/log/error_yenigul.net
TransferLog /var/log/access_log_yenigul.net
</VirtualHost>

ve
# /usr/local/sbin/apachectl restart
 komutu ile değişiklikler aktif hale getirilir.
Bu  komut httpd.conf da yapılan her değişiklikten sonra çalıştırılmalıdır yoksa yapılanlar aktif olmaz.!

Virtual Hosting kismiyla ilgi son olarak bir de nasil CGI izni verilecegini gösterelim. Yukarida belirtiginiz enderunix.org

<Directory  " /usr/local/www/data/domains/enderunix/cgi-bin">

Options +ExecCGI

</Directory>
Yukarıdaki ifadeler ile enderunix.org sitesine ait olan cgi-bin dizinine cgi calistirma izni verdik.

# /usr/local/sbin/apachectl restart  komutunu verdigimizde CGI izinleri aktif hale gelecektir.

.htaccess :
 

.htaccess Apache Web sunucusu ile birlikte gelen ve Apache Web sunucu üzerindeki belirli dizinlere erişim için kullanıcı adı ve şifre sorgulaması yapmaya yarayan bir  uygulamdır. Bu sayede özel dizinlere sadece sizin belirlediginiz kullanıcılar erişebilir.


Örnegin:    http://www.enderunix.org/secure adresine htaccess uygulayalım
 bu dizin  Apache Sunucusunda /www/htdocs/secure  olsun

httpd.conf  dosyasını bir  editörde açalım ve şu ifadeleri yazalım

<Directory /usr/local/www/data/domains/enderunix.org/secure>
 AllowOverride AuthConfig
</Directory>

AllowOverride AuthConfig ifadesi ile bu dizine erişim için httaccess kullanılması gerektigini belirtiyoruz..
htaccess nerdemi olacak ? Tabiki  /usr/local/www/data/domains/enderunix.org/secure   !

Evet /usr/local/www/data/domains/enderunix.org/secure  dizini altında
.httaccess dosyası oluşturun (Evet Nokta var!  .htaccess) ve içine

AuthName  "EnderUNIX Team Ozel bolgesi !!!"
AuthType Basic
AuthUserFile  /usr/local/www/data/domains/enderunix.org/secure/.htpasswd
require valid-user

yazınız..

Biraz Açıklayalım .

AuthName  "EnderUNIX Team Ozel bolgesi !!!"

yazıldıgında Karşınıza çıkan Kullanıcı  adı ve şifre menüsündeki Açıklayıcı bilgidir.  Buraya istediğinizi yazabilirsiniz.

AuthType Basic
bu ifadeyi değiştirmeyin Burada Authentication (Çok düşündüm ama Türkçesi bir türlü aklıma gelmedi)  türü belirtiliyor

AuthUserFile  /usr/local/www/data/domains/enderunix.org/secure/.htpasswd

Yukarıdaki ifade ilede   Kullanıcı adı ve şifrelerin saklandığı dosyanın TAM! yeri belirtiliyor. Evet Tam olarak dosyanın yeri belirtilmelidir.

require valid-user
En son bu ifade ile  bu dizine .htpasswd dosyasında kullanıcıların   erişebiliceği belirtiliyor.

.htaccess dosyası taman sıra .htpasswd dosyasını   oluşturmaya geldi.

# /usr/local/bin/htpasswd  -c  /usr/local/www/data/domains/enderunix.org/secure/.htpasswd   yenigul

Yukarıdaki komut ile  /usr/local/www/data/domains/enderunix.org/securel/.htpasswd dizini altında .httpasswd oluşturulur ve yenigul kullanıcısı eklenir.
-c (creat) parametresi ile .htpasswd dosyası hiç yoktan oluşturulur. ikinci bir kullanıcı eklemek bu ifadeyi kullanmayınız. İkinci kullanıcı ekleme

# /usr/local/bin/htpasswd   /usr/local/www/data/domains/enderunix.org/secure/.htpasswd   yakup

şeklinde olmalıdır. htpasswd  komutunu kullandıktan sonra apache yi restart yapmanıza  gerek YOKTUR.!

 

Dizinleri IP adresine veya Domain(alan) Adına göre kısıtlama:
Bu kısımda kısıtlama yapılacak adresimiz  http://www.yenigul.net/intranet   ve  dosyalar
 /usr/local/www/data/intranet altında bulunsun

- Sadece belirli IPlere erişimi verip diğerlerine yasak koymak için ,Örnegin 212.65.128 uzayındaki IP ler

<Directory  /usr/local/www/data/intranet>
 Order deny,allow
Allow from 212.65.128
Deny from All
</Directory>

- Sadece belirli domainlere erişmi verip diğerlerine yasak koymak için ,Örnegin linux.org.tr

<Directory  /usr/local/www/data/intranet>
 Order deny,allow
Allow from enderunix.org
Deny from All
</Directory>
 

- Sadece belirli IPlere yasak koyup diğerlerine izin vermek için ,Örnegin   195.1.2  uzayındaki IP ler

<Directory  /usr/local/www/data/intranet>
 Order allow,allow
Allow from All
Deny from  195.1.2
</Directory>

- Sadece belirli domainlere yasak koyup  digerlerine izin vermek için  için ,Örnegin lamer.com  domaini

<Directory  /usr/local/www/data/intranet>
 Order allow,deny
Allow from All
Deny from lamer.com
</Directory>

Yapılan değişikliklerin aktif olması için
# /www/bin/apachectl restart  komutunu veriniz..

Dökumanımızın sonuna geldik.

Sorunlarınızı ve önerilerinizi yukarıda belirttiğim e-mail adreslerinden biri ile bana ulaştırabilirsiniz.

Kaynaklar:
Apache   Manual:

http://httpd.apache.org/docs/