Ana Sayfa  |  Makaleler  | Programlama  | Haberler Forum  |  İpuçları  |  Download  |  E-Mail
     
       
       
         
           
           
           
           
       
   
   
 

 

APACHE 2.2.3 : AĞ SUNUCUSU
( soner.sag@linuxprompt.com )

 

Giriş

Internet küçük, büyük ağların buluştuğu bir ortamdır. Bu ağlar içerikleri sayesinde ziyaretçilere birçok konuda bilgi sunmaktadırlar. Internetin en cazip tarafı işte bu zengin içeriktir. Ama bu içeriğin kullanıcılarla buluşması için bir yazılıma ihtiyaç var. Bu belgede Orta ölçekli bir server'da çalışan ve birkaç host barındıran "Apache 2.2.3" ağ sunucusunun nasıl yapılandırıldığı incelenecektir.

Bir web sunucusu varsa en az bir de IP adresi olmalıdır. HTTP 1.1 'den önce mantık her web sitesi için bir IP adresi idi.  Apache 1.1  versiyonu ile birlikte isim tabanlı hizmetlere destek vermeye başlandi. Bu sayede bir IP adresi üzerinden bir çok host barındırılabilir hale getirildi. Apache 1.1 ve http 1.1 sürümleri aşağı yukarı aynı tarihler de çıktı. Bu açıdan bakıldığında apache isim tabanlı sanal sunucu ayarlarını destekleyen  ilk web sunuculardandır.

Aynı zamanda bir ağ sunucusunun yapısının esnek olması taleplere cevap verirken de güvenli olması gerekmektedir. Apache 'nin gücü ensekliğidir. Özelikle "Apache 2" ile ön plana çıkan bu esneklik herhangi bir modul eklemek için yeniden derleme gerekliliğini ortadan kaldirmiştir. "Apache 1.3" de karşimiza çıkan httpd.conf dosyasının yerini apache2.conf dosyası almıştır.

MODULLER

Modüller apache 'nin  ne hizmeti verdiğinin göstergesidir. İlk kurulumla gelen moduller standart bir belge  yayını için gereken minumum ayarlar içindir. apache2 'de moduller "/etc/apache2/mods-available" dizininde tutulur. Burada çalıştırmak istediğiniz modulü "/etc/apache2/mods-enabled" dizinine linkle bağlamanız gerekmektedir. Mesela php5 kullanmanız gerekiyor. "/etc/apache2/mods-enabled" dizinine girerek "ln -s ../mods-available/php5* ." komutu vermeniz yeterlidir. Bu işlem "a2enmod <modul_adı>" şeklinde de yapılabilir. Tabi bu işlemden sonra apache2  yeniden başlatılır.

APACHE WEB YAYINI

Apache de bir web sitesini veya belgeyi yayınlamak için öncelikle bunların bir dizine yerleştirilmeleri gerekir. Bu yazı da bahsedilen bu aşamadan sonrası yani ayarlar kısmı içindir. Bu yazı da bu dizinler apache 'ye gösterilecek ve içeriğe göre bazı yetkilendirilmeler yapılacaktır. Serverımızda da çalışan apache2 'de 2 adet ayar dosyası bulunmaktadır. Bu dosyalar aşağıya yazılmıştır.

linuxprompt.com.conf

default.linuxpromt.com.conf

Apache server ile ilgili ayar dosyalarımızın "/etc/apache2/sites-available" dizinin de bulunması gerekir. Bu dizinden de "/etc/apache2/sites-enabled" dizinine linklenmelidirler. Bu işlemler için komut satırı açilarak aşağıdaki komutlar girilir.

linuxprompt~# cd /etc/apache2/sites-available
linuxprompt~# a2ensite linuxprompt.com.conf
linuxprompt~# a2ensite default.linuxprompt.conf

 

TEMEL SUNUCU  AYARLARI

Temel ayarlar "/etc/apache2/apache2.conf" dosyasında tutulmaktadır. Gerektiğinde performans veya güvenlik  için değiştirilmesi gerekebilir. Burada değiştirilen ayarlar tüm apache 'nin davranışını değiştirmektedir.

StartServers 5

Bu ayar Apache 'nin kaç süreç 'le başlatılacağını gösterir. Server da prosesleri görmek için

linuxprompt~# ps ax

komutunu kullandığınız da görülen

31092 ?        Ss     0:00 /usr/sbin/apache2 -k start

süreçlerdir.

MaxClient 100

Aynı anda bağlanılabilecek kullanıcı sayısıdır. 100 orta ve küçük ölçekli bir servis çalıştırılıyorsa yeterlidir.

MaxRequestsPerChild 150

Bu sayı apache alt süreci öldürmeden önce sürecin tamamlaması gereken istek sayısıdır.

AllowOverride <On> <Off>

Apache de yayın yapılacak dizinin kontrolunu "/etc/apache2/sites-available" dizininin altına koyduğumuz ayar dosyasından yapariz. Fakat istersek her dizini ayrı ayrı bulunduğu alandan yönetmemiz mümkündür. Bu seçenek on ise o dizinde .htaccess dosyası olup olmadığına bakacaktır ve .htaccess dosyasının içinde dizin yetkileri olmalıdır.

PidFile /var/run/apache2.pid

Bu parametre apache 'nin ana sürecinin tutulduğu dosyanın yeridir.

Timeout 300

Apache 'nin istemci ile bağlantısının koptuğundan emin olması için yanıt almadan beklemesi gereken süredir. Saniye cinsinden belirtilir. 300 saniye yani 5 dakikadır.

MinSpareServers 5

Apache aniden artabilecek isteğe karşı belirli bi sayıda yedek sunucu bulundurur. Ani yük artışlarında toplam süreç sayısı 10 ise burada 5 artırılacaktır. Yani toplam da 15 süreç görülecektir.

MaxSpareServer 10

Apache aktif süreçler kapatılırken süreç toplamına buradaki sayı kadar süreç kler.. Bunun sebebi ani yüklenme durumunda hızlı cevap vermesi gerektiği içindir. Burada bahsedilen 'ler fazla yük durumunda dır. 140 tane istek varsa ve hızla 110 isteğe düşmüşse apache 120 süreç çalıştırır.

User www-data
Group www-data

Apache2 'nin kullanıcı adı ve grubudur. www-data olarak gelmektedir.

Belgenin başında belirtildiği gibi buraya kadar olan ayarların tüm web hizmetlerini etkileyeceğinden bilgi olarak saklanması sadece belirli yeterlilikten sonra kullanılmalıdır.

Apache ayar dosyalarında http 'de kullanılan taglar gibi işaretler kullanılır."<Directory>...</Directory>" şeklinde tagların içine ayarlar yerleştirilir. Bu tagların dışında kalan apache komutları bu belgede global ayarlar olarak nitelendirilecektir.

Açıklamalar da öncelik global tanımlara verilecektir.

<VirtualHost _default_:80>........</VirtualHost>

Apache server 'da birkaç domain yayını yapılacaksa VirtualHost tanımı kullanmamız gerekmektedir. <VirtualHost> tanımı ayarlar yazıldıktan sonra </VirtualHost> ile kapatılmalıdır. "default_"_ webserverınızın default ip adresidir._default_:80 yerine *:80 veya *:443 gibi kullandığımız portla birlikte belirtilebilir.

Apache 'de tanımlamalar yukardaki VirtualHost örneğindeki gibi tagların içinde yer alır.Bu taglar gitgide daraltılarak istenilen ayar oluşturulur. Bir web yayınında bazı ayarları bir kere girmeniz yeterlidir. Bunlar ilk tag açıldıktan  sonra girilir. Bu ayarlar aşağıda açiklanmiştir.

DocumentRoot < dizin >

Yayının yapılacağı dizini belirtir. Aksi belirtilmedikçe apache, kullanıcılarını bu dizinin altina indirilmez.

ServerName www.linuxprompt.com

Serverımızın adıdır. Mesela serverımıza "www.linuxprompt.com" adı ile girilecekse yukardaki ServerName tanımı yapılmalıdır. Burada dikkat edilmesi gereken  http://linuxprompt.com ile http://www.linuxprompt.com adları arasında fark olduğudur. Eğer ki bir alana birkaç isimle bağlanılacaksa ServerAlias ( Server Lakabı ) kullanılmalıdır. Server adı ve lakabı DNS kayıtlarımızda olması gerekmektedir. IP  Aksi taktirde çalışmayacaktır.

ServerAlias linuxprompt.com

Serverımızı  başka bir isimle de ulaşmak  istersek diger ismi bu bölüme yazmalıyız. Birden çok kullanılabilir. Burada kullandığınız adın da DNS kayıtlarınız da olması gerektiğini unutmayın.

ServerAdmin admin@linuxprompt.com

Hataların bildirileceği sistem yöneticisinin adresidir. Örnek olarak sitenizde herhangi bir hata oluştuğunda kullanıcının sizinle irtibata geçmesini sağlama için hata mesajının içerisinde  belitilir.

CharsetDefault UTF8

Yayın yapılacak belgenin karakter seti 'dir.  Farklı lisanların farklı Charset kodları vardır. Türkçenin ISO Charset 'i ISO-8859-9 dur. Ama aynı belge içinde hem arapça hem türkçe karakter kullanmamız gerekebilir. Bu durumda evrensel bir kodlama gerekmektedir. Bu server 'da bu yüzden evresel karakter set olan UTF-8 karakter seti kullanılmaktadır.

RewriteEngine On

Apache web sunucusu için tasarlanmış en karmaşık modüllerden bir tanesi de rewrite modülüdür. Bu modül sayesinde apache web sunucusu istemciden gelen URL üzerinde değişiklik yapabilmektedir. Bu modülün temel kullanım amacı istemciden gönderilen URL üzerinde belli örüntüler aramak ve bu örüntüleri içeren URL'ler üzerinde değişiklik yapmaktır. Biz bu örüntüleri dile göre içerik sunacağımızdan kullanacağız. Varsayılan olarak rewrite modülü aktif değildir. Modülün aktif olup olmadığı "RewriteEngine" deyimi ile kontrol edilmektedir. "RewriteEngine On" Sunucuya anlamlı linkler tekniğine başladığımızı söyler. Modül yüklü değilse "a2enmod rewrite" yazarak rewrite.load modulunun yüklenmesi gerekmektedir.

RewriteLog /var/log/apache2/rewrite.log

rewrite işlemi ile ilgili log tutacağımız dosya "/var/log/apache2/rewrite.log" dosyasıdır.

RewriteLogLevel 3

Log seviyesini belirtiyoruz. Log seviyesi 0 dan 9 a kadardır. 0 Log yapılmayacağını belirtir. Biz debug olarak en düşük değeri yani 3 'ü seçiyoruz.

RewriteRule ^/tr/* http://tr.linuxprompt.com [R,L]
RewriteRule ^/fr/* http://fr.linuxprompt.com [R,L]
RewriteRule ^/de/* http://de.linuxprompt.com [R,L]
RewriteRule ^/ru/* http://ru.linuxprompt.com [R,L]
RewriteRule ^/en/* http://en.linuxprompt.com [R,L]

URL 'yi yeniden yazma işlemini gerçekleştiren RewriteRule deyimleridir.

İstemciden gelen ve istekte bulunan URL üzerinde, yukarda  verilen regüler ifadeler (^/tr/*,^/fr/*, ^/de/*, ^/ru/*, ^/en/* )  ile arama gerçekleştirilir. Verilen regüler ifade , istemcinin istediği URL'ye uyduğu takdirde, (hangisi örtüşüyorsa) istemciden gelen URL YENI_URL olarak değiştirilir. Yani www.linuxprompt.com  olarak giren bir kullanıcı browser 'ı almanca kullanıyorsa ^/de/* reguler ifadesi ile örtüşecek ve de.linuxprompt.com alanına yönlendirilecektir.

[R,L]

R : Yeni URL'ye yönlendirme işleminin kullanıcının   browserından gerçekleştirilmesini sağlar. R bayrağı verilemediği durumlarda yönlendirme işlemi apache sunucusu tarafından gerçekleştirilir. R bayrağı verildiği takdirde apache web sunucusu kulanıcının browser 'ına  yönlendirme işlemini yapabilmesi için 302 numaralı HTTP mesajı ve yeni URL'yi gönderir.

L : URL yeniden yazma işleminin biritirilmesini sağlar. Bu kuraldan sonra tanımlanmış kurallar işletilmez. Yani işlem bitirilir.

linuxprompt.com alan adının DNS tanımlarında "CNAME" ile bu adlar tanımlanmalıdır. ( tr, fr, de, ru, en )

DIZIN HAKLARININ YAPILANDIRILMASI

<Directory "/srv/www/linuxprompt.com"> ......</Directory>

"/srv/www/linuxprompt.com" dizininden web yayınının yapılacağını belirtiyoruz. Directory tagları arasında apache 'nin bu dizine nasıl davranıcağını ayarlayacağız.

DirectoryIndex index.html index.php

Dizinin içerisinde gösterilecek olan ön tanımlı dosya adları belirtiliyor. Apache 'nin genel tanımlarında index.html olarak yer almaktadır. Biz burada index.php dosyasını da ekliyoruz. Bazı dizinlerimiz de yoksa index.php varsa ve kullanıcı  dizini çağırdığında index.php dosyası açılacaktır.

AllowOverride Options FileInfo
AllowOverride None

.htaccess dosyalarının desteğinin kaldırılması için bu komut gereklidir.

Order allow,deny
Allow from all

Bu sunucudan kimlerin dosya okumasına izin verildiğinin ayarı.Bütün adreslerden erişime izin ver.

Alias /phpmyadmin "/srv/www/phpmyadmin"

Bir web yayınında bazen uzun dizinler ve dosya adları kullanmak gerekir. Ya da belirli bir alana belirli bir isimle başvurulması istenebilir. Bu durumlar da Alias ( Lakap ) kullanılmalıdır. Yukarıda www.linuxprompt.com/phpmyadmin yazılarak "srv/www/phpmyadmin" dizinine gidileceği yazılmıştır. Alias 'dan sonra <Directory> .. </Directory> tagları arasında bu dizine erişimi ayarlayacağız.

Allow from 127. 10. 88.249.93.13

Sadece 127. 10. ile başlayan ve 88.249.93.29 IP adresinden gelen isteklere cevap verileceği söyleniyor.

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

Bu komut ile /cgi-bin/ ayrı bir ScriptAlias komutu verilmeyen bütün sanal sunucularda kullanacaktır. CGI betikleri bu dizinin içine yerleştirilmelidir.

Options -Indexes

Dizinin içeriğinin gösterilmeyeceğini belirtiyoruz. Güvenlik için kullanılması önerilir.

Options FollowSymLinks
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch

ExecCGI ile bu dizinde CGI betiklerini çalıştırılabilir duruma getiriyoruz. -MultiViews ile yapılan bir istekte uzantilari dikkate almaksızın "index.*" gibi dosyalari listelemesi engelleniyor. " - " ile bu özelliği kapalı tutuyoruz.  SymLinksIfOwnerMatch ile herhangi bir kullanıcının dizin içersinde bir link vermesini engelliyoruz. SymLinksIfOwnerMatch komutu FollowSymLinks 'den daha güvenlidir.Ancak istenen dizinin birkaç seviye içerde olması durumunda tepki süresini epey yavaşlatır. Fakat burada bahsedilen cgi dizini olduğu için güvenliği üst seviyede tumak gerekir.

Options Indexes MultiViews FollowSymLinks

Indexes MultiViews ile yapılan bir istekte uzantilari dikkate almaksızın "index.*" gibi dosyalari listeliyor. FollowSymLinks ile dosya haklarını ve link olup olmadığını kontrol ediyor.

Options None

Tüm Options seçeneklerini kapatmak için kullanılır.

linuxprompt.com, phpmyadmin, cgi-bin, doc, dizinlerinin yayınlandığı

/etc/apache2/sites-available/default.linuxprompt.com.conf

dosyasının içeriği aşağıdadır.

<VirtualHost _default_:80>
DocumentRoot /srv/www/linuxprompt.com
ServerName www.linuxprompt.com
ServerAlias www.linuxprompt.com
ServerAlias linuxprompt.com
ServerAdmin info@linuxprompt.com
CharsetDefault UTF-8
<Directory "/srv/www/linuxprompt.com">
Options -Indexes
Options FollowSymLinks
DirectoryIndex index.php index.html index.htm
AllowOverride None
Order allow,deny
Allow from all

</Directory>

Alias /phpmyadmin "/srv/www/phpmyadmin"
<Directory /srv/www/phpmyadmin/>
Options -Indexes
AllowOverride None
Order allow,deny
Allow from 127. 10. 88.249.93.13
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow

Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>

default.linuxprompt.com.conf ile ilgili

/etc/apache2/sites-available/linuxprompt.com.conf

dosyasının içeriği aşağıdadır.

<VirtualHost *:80>
DocumentRoot /srv/www/linuxprompt.com
RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
RewriteRule ^/tr/* http://tr.linuxprompt.com [R,L]
RewriteRule ^/fr/* http://fr.linuxprompt.com [R,L]
RewriteRule ^/de/* http://de.linuxprompt.com [R,L]
RewriteRule ^/ru/* http://ru.linuxprompt.com [R,L]
RewriteRule ^/en/* http://en.linuxprompt.com [R,L]

ServerName linuxprompt.com
ServerAlias linuxprompt.com
ServerAlias www.linuxprompt.com
ServerAlias linuxprompt.net
ServerAlias www.linuxprompt.net
ServerAlias linuxprompt.com
ServerAlias www.linuxprompt.com

 ServerAdmin info@linuxprompt.com
<Directory /srv/www/linuxprompt.com>
AllowOverride Options FileInfo
DirectoryIndex index.php index.html index.htm
Options -Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /srv/ftp/0

ServerName ftp.linuxprompt.com
ServerAdmin info@linuxprompt.com

<Directory /srv/ftp/DOWNLOAD>
AllowOverride Options FileInfo
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

#Dile göre yapılandirilmis v.hostlar
<VirtualHost *:80>
DocumentRoot /srv/www/linuxprompt.com/tr
ServerName tr.linuxprompt.com
ServerAlias tr.linuxprompt.com
ServerAlias tr.linuxprompt.com

ServerAdmin info@linuxprompt.com

<Directory /srv/www/linuxprompt.com/tr>
AllowOverride Options FileInfo
DirectoryIndex index.php index.html index.htm
Options -Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /srv/www/linuxprompt.com/fr
ServerName fr.linuxprompt.com
ServerAlias fr.linuxprompt.com
ServerAlias fr.linuxprompt.com

ServerAdmin info@linuxprompt.com

<Directory /srv/www/linuxprompt.com/fr>
AllowOverride Options FileInfo
DirectoryIndex index.php index.html index.htm
Options -Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /srv/www/linuxprompt.com/en
ServerName en.linuxprompt.com
ServerAlias en.linuxprompt.com
ServerAlias en.linuxprompt.com

ServerAdmin info@linuxprompt.com

<Directory /srv/www/linuxprompt.com/en>
AllowOverride Options FileInfo
DirectoryIndex index.php index.html index.htm
Options -Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /srv/www/linuxprompt.com/de
ServerName de.linuxprompt.com
ServerAlias de.linuxprompt.com
ServerAlias de.linuxprompt.com

ServerAdmin info@linuxprompt.com

<Directory /srv/www/linuxprompt.com/de>
AllowOverride Options FileInfo
DirectoryIndex index.php index.html index.htm
Options -Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /srv/www/linuxprompt.com/tr
ServerName ru.linuxprompt.com
ServerAlias ru.linuxprompt.com
ServerAlias ru.linuxprompt.com

ServerAdmin info@linuxprompt.com

<Directory /srv/www/linuxprompt.com/ru>
AllowOverride Options FileInfo
DirectoryIndex index.php index.html index.htm
Options -Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

 

Yazan : Soner SAĞ
Email : soner.sag@linuxprompt.com