Apache Yönergeleri. Apache konfigrasyon dosyaları için gerekli yönergeler. /etc/apache2/httpd.conf. /etc/apache2/apache2.conf. /etc/apache2/ports.

Benzer belgeler
LDAP VE WORDPRESS İLE

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011

Scream! e gelen veri akışlarından bazılarını diğer bir kurum yada bilgisayarla paylaşmak için kullanılabilir.

Temel Linux Sunucusu Kurulumu

Üst Düzey Programlama

Dokuz Eylül Üniversitesi Bilgi İşlem Dairesi Sunum konusu: Web Güvenliği

Web Formlar ve Sayfalar Arasında Bilgi Gönderme. BATML İnternet Programcılığı 1

WAMP SERVER KURULUMU

İNTERNET PROGRAMCILIĞI HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir.

ProFTPD FTP Sunucusu. Devrim GÜNDÜZ. TR.NET Sistem Destek Uzmanı.

OPENBSD İŞLETİM SİSTEMİ ÜZERİNE PFW KURULUMU

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Örnek bir kullanım ve bilgisayar ağlarını oluşturan bileşenlerin özeti

BIND ile DNS Sunucu Kurulumu

Trend Micro Worry-Free Business Security 8.0 İlk Kez Kurulumla İlgili İpuçları ve Püf Noktaları

1 STUNNEL NEDİR? 2 STUNNEL KURULUMU

Bilindik engelleme yöntemlerinin dışında olan, kurumsal web filitreleri nasıl aşılır?

.: Linux Kullanıcıları Derneği. III. Linux ve Özgür Yazılım Şenliği Mayıs Milli Kütüphane Ankara :.

Veri Tabanı Yönetim Sistemleri Bölüm - 02

Wireshark Lab.: DNS. 1. nslookup

Firewall Log Server. Kurulum Kılavuzu

Paketi Açalım Indirmiş olduğunuz paketi tar komutu ile açın: tar xzf nagios version.tar.gz Kullanıcı Gruplarını Oluşturalım Paketi derledikten sonra n

MCR02-AE Ethernet Temassız Kart Okuyucu

Bu makalede 2003 sunucu, Windows 2003 Server anlamına gelmektedir. Aşağıda yapılan işlemler 2003 R2 sunucu üzerinde denenmiş ve çalıştırılmıştır.

General myzyxel.com myzyxel.com Servis Yönetim Servis Name Content Filter Name Password myzyxel.com Submit Redirected URL

Scan Station Pro 550 Adminstration & Scan Station Service Araçları

Subversion Sürüm Kontrol Sistemi Kurulumu ve Apache Yapılandırması. Çağrı Emer

PHP 1. Hafta 2.Sunum

Hızlı Başlangıç Kılavuzu

AirTies Kablosuz Erişim Noktası (Access Point) olarak kullanacağınız cihazı bilgisayarınıza bağlayarak ayarlarını yapabilirsiniz.

OPENSSL İLE SSL KURULUMU - UBUNTU SERVER 14.04, 15.04, 16.04

Bölüm 10: PHP ile Veritabanı Uygulamaları

Apache Web Sunucusu ve Güvenlik. Serbülent ÜNSAL serbulentu[et]gmail.com

Ubuntu üzerine phpbb forum yazılımının 3.2 sürümünün kurulumu. Ocak, 2017

FTP ve Güvenlik Duvarları

Apache üzerinden Red Hat 5 yüklenmesi

Ortamınızda A.D. veya LDAP sistemi var ise aşağıdaki linkten KoruMail LDAP-AD isimli dokümanı inceleyebilirsiniz.

Linux Dosya ve Dizin Yapısı

EC-485. Ethernet RS485 Çevirici. İstanbul Yazılım ve Elektronik Teknolojileri

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

AKINSOFT FilterPlus 2

Web Tasarımının Temelleri

TachoMobile Server Uygulaması Kullanım Kılavuzu

Sözü fazla uzatmadan bu durumlar için bir çözüm yolunu sizlere paylaşmak istiyorum..

Kurumsal Güvenlik ve Web Filtreleme

1.1 Web Kavramlar URL terimini tanımlayınız ve anlayınız.

Üst Düzey Programlama

MaestroPanel Kurulum

Programlama Yazılımı ile Web Sitesi Oluşturma

Windows 7 - IIS 7.5 üzerine PHP ve MySQL kurulumu

ÖĞRENME FAALİYETİ 1 ÖĞRENME FAALİYETİ 1 1. FORMLAR

V-Ray Lisanslama Sistemi

Kurumsal Güvenlik ve Web Filtreleme

Linux Kurulumu (Sürüm 1.52) İçindekiler

KULLANICI KILAVUZU: UEA FİX KULLANICILARININ SSLVPN ERİŞİMİ İMKB İÇİNDEKİLER

NESNEYE YÖNELİK PROGRAMLAMA

İÇERİK YÖNETİM SİSTEMİ (CMS) Bir web sitesi yayınlamak için yapılması gerekenler:

Windows Đşletim Sistemleri AD Etki Alanı Grupları Đncelenmesi ve Güvenlik Ayarları

WebInstaller. 1. Kurulum Đçin Gereksinimler

4. Bağlantı (Köprü) Oluşturma

Linux işletim sistemlerinde dosya hiyerarşisinde en üstte bulunan dizindir. Diğer bütün dizinler kök dizinin altında bulunur.

SIMAN KULLANIM KILAVUZU

MODSECURITY DENETİM KAYITLARINI ANLAMAK. Gökhan Alkan,

AKINSOFT Franchise Server 2 Yardım Dokümanı

08217 Internet Programcılığı I Internet Programming I

TÜRKİYE LINUX KULLANICILARI DERNEĞİ APACHE WEB SUNUCUSU SEMİNERİ. Doruk Fişek.

Denetim Masası/Programlar/Windows özelliklerini Aç/Kapat

OTURUM AÇMA ADLARI. Tavsiye Edilen Önhazırlık Enterprise Manager'i kullanabilmek.

PHP ile İnternet Programlama

BLGM 354 DENEY 1 * GİRİŞ

Öğrencilerin Canlı derslere katılması, * Sisteme giriş

Çözüm Bilgisayar. Çözüm İntSite

Öğr. Gör. Serkan AKSU 1

MOBİLTEG MİKRO DEPO OTOMASYONU

DNS Nedir? HİKMET TÜYSÜZ

Aktif Dizin Logon/Logoff Script Ayarları Versiyon

Fiery seçenekleri 1.3 yardımı (sunucu)

McAfee epolicy Orchestrator Pre-Installation Auditor 2.0.0

1.PROGRAMLAMAYA GİRİŞ

HACETTEPE ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BİLGİSAYAR AĞLARI LABORATUVARI DENEY 5. Yönlendiricilerde İşlem İzleme ve Hata Ayıklama

EC-232C. Ethernet RS232 Çevirici. İstanbul Yazılım ve Elektronik Teknolojileri

GELİŞMİŞ AĞ İZLEME KUBBE KAMERASI KURULUM KILAVUZU

Mikro Ayarları. Mikro Programının kurulu olduğu veritabanı ve web servisi için bağlantı ayarlarının yapıldığı menüdür.

Google Cloud Print Kılavuzu

Cyberoam Single Sing On İle

Web Servis-Web Sitesi Bağlantısı

ETA:MOBİL KURULUM TALİMATI

AKUVOX R23 KAPI ÖNÜ ZİL PANELİ KULLANICI KILAVUZU

Uzaktan Kurulum Kılavuzu

PBS Betiği Hazırlama ve PBS Komutları. Feyza Eryol

Bu bölüm V- Ray License Server lisans sunucusu uygulamasının kurulumundan

Cambridge LMS e Başlama- Öğrenciler

IPCop ile Ağ Güvenliği ve Yönlendirme. Kerem Can Karakaş.

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

<html> <head> <title>sayfa Başlığı</title> </head> <body> Bu benim ilk sayfam <b>bu metin koyu</b> </body> </html>

Google Cloud Print Kılavuzu

NicProxy Registrar AWBS Modül Kurulumu Versiyon 1.0

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Transkript:

Apache Yönergeleri Apache konfigrasyon dosyaları için gerekli yönergeler Apache yapılandırma dosyası (apache2.conf) düzen açısından birden fazla dosyaya bölünmüştür. Kabaca bu dosyalara göz atalım: /etc/apache2/httpd.conf Bu dosya boş gelir. Apache yöneticisinin ayarlarını tanımladığı dosyadır. Bu dosyanın içeriği ana apache yapılandırma dosyasına (apache2.conf) dahil edilecektir. Yani bu dosyaya yazılan her şey apache2.conf dosyasına yazılmış gibi davranılır. Bu yüzden, sistem yöneticilerinin apache2.conf yerine bu dosyayı değiştirmeleri tercih edilir. /etc/apache2/apache2.conf Apache 2 ana yapılandırma dosyasıdır. Apache servisi sürecinin temel ayarları, genel Apache ayarları, log ayarları gibi ayarları barındırır. Ayrıca parçalara bölünmüş bütün apache ayar dosyaları bu dosya içerisine aşağıdaki yönergeler vasıtasıyla dahil edilir: # Include module configuration: Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf # Include all the user configurations: Include /etc/apache2/httpd.conf # Include ports listing Include /etc/apache2/ports.conf # Include generic snippets of statements Include /etc/apache2/conf.d/ # Include the virtual host configurations: Include /etc/apache2/sites-enabled/ /etc/apache2/ports.conf Dinlenen portların ayarlandığı dosyadır. /etc/apache2/conf.d/ Yukarıda bahsedilen durumlar dışında bazı özel durumlara özgü ayarların ayrı ayrı dosyalar halinde tutulduğu dizindir. Bu dizin içindeki bütün dosyalar apache2.conf dosyasına dahil edilir. /etc/apache2/mods-enabled/ Aktif edilen Apache modülleri ayar dosyalarının bulunduğu dizindir. Aslında bu ayar dosyaları /etc/apache2/mods-available/ dizininde durur. mods-enabled dizinindeki dosyalar gerçekte mods-available dizinindekilere birer sembolik linktir. Bir Apache modülünü kaldırmak için ilgili modülün mods-enabled dizinindeki sembolik linkini silebilir ve bir Apache modülünü aktif hale getirmek için mods-enabled dizininden mods-available dizini içerisindeki ilgili modülün dosyalarına sembolik link oluşturabilirsiniz. /etc/apache2/sites-enabled/ Aktif edilen Apache siteleri (sanal konak - virtual host) ayarlarının bulunduğu dizindir. mods-enabled dizinine benzer şekilde, sitesenabled dizinindeki dosyalar /etc/apache2/sites-available dizininde ilgili yerlere birer sembolik linktir. a2ensite ve a2dissite araçlarıyla sırasıyla bir siteyi faal hale getirebilir veya bir siteyi kaldırabilirsiniz..htaccess Bu dosya, içinde bulunduğu dizin için geçerli olacak Apache ayarlarını tanımlar. Yani ana Apache ayar dosyasını değiştirmeden, web yöneticilerinin kendine ait dizinlerinin ayarlarını özelleştirebilmelerini sağlar. En son okunacak ayar dosyası olduğu için diğerlerinden baskındır ve bu dosyadaki değişikliklerin etkili olabilmesi için Apache yi yeniden başlatmaya gerek yoktur. Ana Apache ayar dosyalarında seçeneği ile.htaccess dosyaları etkisiz hale getirilebilir. www.dijitalders.com Apache Yönergeleri 1

2.1 Debian Ön Tanımlı Yapılandırma Dosyalarının İncelenmesi 2.1.1 apache2.conf apache2.conf dosyasının ana Apache ayar dosyası olduğundan bahsetmiştik. Apache servisi ile ilgili genel ayarların bulunduğu bu dosyaya biraz daha yakından bakalım: KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 User www-data Group www-data AccessFileName.htaccess HostnameLookups Off KeepAlive yönergesi, kalıcı bağlantı özelliğini açıp kapatır. Aynı bağlantı üzerinden çok sayıda isteğin gönderilebilmesine izin vermek istiyorsak değeri On olmalı. MaxKeepAliveRequest yönergesi, KeepAlive seçeneği açık iken, bağlantı başına kabul edilecek istek sayısını belirler. 0 değeri sonsuz anlamındadır. Yüksek performans (başarım) için yüksek değerler vermeniz tavsiye edilir. KeepAliveTimeout yönergesi, sunucu kalıcı bir bağlantıyı kapatmadan önce, bir sonraki isteği kaç saniye bekleyeceğini belirler. User ve Group yönergeleri Apache sürecini çalıştıracak kullanıcıyı ve grubu belirler. Seçtiğiniz kullanıcı ve grup, Apache nin ilgilendiği dizinler üzerinde gerekli haklara sahip olmalıdır. Genellikle varsayılan değerleri değiştirmenize gerek yoktur. AccessFileName yönergesi, meşhur.htaccess dosyası için farklı bir isim belirlemeye yarar. HostnameLookups yönergesi, istemcinin IP adresinin DNS sistemi içerisinde tersine sorgulanıp alan adının bulunması isteniyorsa, On yapılmalıdır. İstemcinin adına (hostname) ihtiyaç duymayan sitelerde ağ trafiğini yormamak düşüncesi ile varsayılan değeri Off tur. Değeri On ise, bulunan ad, CGI çevre değişkenlerinden REMOTE_HOST a aktarılır. Bir diğer değer olan Double ise IP adresini tersine sorguladıktan sonra, elde ettiği adı bir kez daha DNS sistemi içerisinde sorgular ve sonuçta elde edilen IP adresi istemcininkine eşit olup olmadığı kontrol edilir. Eğer ayar dosyalarınızda Allow from Ceren Bilgisayar şeklinde alan adına göre erişim denetimi yapıyorsanız, HostnameLookups ayarının değerine bakılmaksızın çift yönlü (Double) DNS sorgusu yapılır. HostnameLookups ve alan adına göre erişim denetimi gibi DNS sorgusu gerektiren işlemler, Apache yi oldukça yavaşlatır. Bu yüzden, bu seçenekler gerçekten gerekiyorsa kullanılmalıdır. ErrorLog yönergesi, hata loglarının hangi dosyaya yazılacağını belirler. Varsayılan /var/log/apache2/error.log dur. LogLevel yönergesi, log seviyesini belirler. Hata ayıklama, test, ürün ortamınıza göre değiştirmeniz gerekebilir. Ayar dosyalarındaki diğer yönergeler için daha ayrıntılı bilgiyi http://httpd.apache.org/docs/2.2/mod/quickreference.html adresinde bulabilirsiniz. 2.1.2 ports.conf Apache nin gelen istekler için dinleyeceği portların belirlendiği dosya. Varsayılan olarak içeriği genelde tek satırdan oluşur: Listen 80 Listen yönergesi, Apache nin dinleyeceği IP adresi ve portu belirler (Listen IPv4 ort ya da Listen [IPv6] ort şeklinde belirtilebilir. IPv6 adresleri belirtilirken etrafına [] karakterleri konur). Eğer IP adresi belirtilmemişse, tüm arabirimlerin belirtilen portu dinlenecektir. Birden fazla Listen yönergesine sahip olabilirsiniz (En az bir tane olmalı). Bu durumda Apache belirtilen portların (belirtilmişse IP lerin) hepsini dinleyecektir. Örneğin ports.conf dosyanız şu şekilde olabilir: Listen 80 Listen 81 Örneğin SSL bağlantıları için Apache den 443 nolu portu dinlemesini isteyebilirsiniz: Listen 80 Listen 443 Ya da sadece mod_ssl modülü yüklenmişse bu portu dinlemesini isteyebilirsiniz: Listen 80 <IfModule mod_ssl.c> Listen 443 </IfModule> Varsayılan durumda mod_ssl aktif değilse, aktif hale getirmek için a2enmod ssl komutunu kullanın. <IfModule modul_adi> etiketi içerisindeki yönergeler, modul_adi modülü yüklenmiş ise gerçekleştirilir. 2.2 Sanal Konaklar (Virtual Hosts) Tek bir Apache HTTP sunucusunun, birden fazla web sitesine ayrı ayrı hizmet vermesini sağlayabiliriz. Örneğin magmalinux.com, magmalinux.net ve cerenbilgisayar.com.tr web siteleri birbirinden bağımsız bir şekilde aynı Apache sunucusu altında çalışabilir. Her bir sanal konak için Apache sites-available dizini altında, bir dosya oluşturup ilgili sanal konak ayarlarını yapmak gerekir (Sanal konakların çalışabilmesi için istemcinin HTTP 1.1 protokolünü kullanıyor olması gerekir. Ayrıca alan adlarının ilgili DNS ayarlarını da yapmış olmalısınız). 2.2.1 www.magmalinux.com Alan adı için Sanal Konak Öncelikle sites-available dizini içerisinde bir dosya oluşturup sanal konak tanımımızı bu dosya içinde yapalım. Sanak konak ayarlarının bulunacağı bu dosyaya istediğimiz ismi verebilsekte, anlaşılabilirlik ve düzen açısından dosyamıza www.magmalinux.com ismini verelim. www.magmalinux.com sanal konağı için temel ayarlarımız şu şekilde: www.dijitalders.com Apache Yönergeleri 2

<VirtualHost *> ServerName www.magmalinux.com ServerAlias magmalinux.com DocumentRoot "/srv/www/vhosts/www.magmalinux.com" </VirtualHost> ServerName, bu sanal konak için, internet tarayıcısında yazılan sunucu adıyla (www.magmalinux.com gibi) eşleşecek ismi belirler. www.magmalinux.com yerine sadece magmalinux.com yazıldığı zaman da bu sanal konağa erişilebilmesi için, bir de ServerAlias tanımladık. DocumentRoot ise, bu sanal konak için kök dizinimizi belirler (Yani http://www.magmalinux.com/ şeklinde istekte bulunulduğunda yayınlanacak içeriğin bulunduğu dizin). Bu örneğimizde, sanal konaklarımızın varsayılan web sitesinden ayrı olması gerekçesiyle /var/www yerine /srv/www/vhosts dizinini seçtik. Dikkat! Bu sanal konağımızın çalışabilmesi için DNS sunucusunda magmalinux.com alan adı için gereken ayarlamalar yapılmış olmalıdır (Yani www.magmalinux.com ve magmalinux.com adresleri doğru bilgisayarlara işaret etmelidir). Sanal konak dosyasında yaptığınız bu ayarlar, DNS ayarlarınızı GERÇEKLEŞTİRMEZ. DNS ayarlamaları için bakınız http://belgeler.magmalinux.org/bind/. Şimdi kök dizinimiz olan /srv/www/vhosts/www.magmalinux.com için bir takım ayarlar yapalım. İşletim sistemindeki dosya sisteminin bir parçası olan dizinler için yapılan ayarlar <Directory dizin_ismi> etiketleri arasında bulunur. Örneğin: <VirtualHost *> ServerName www.magmalinux.com ServerAlias magmalinux.com DocumentRoot "/srv/www/vhosts/www.magmalinux.com" <Directory "/srv/www/vhosts/www.magmalinux.com"> Options Indexes FollowSymLinks MultiViews Order allow,deny Allow from all </VirtualHost> Gördüğünüz üzere /srv/www/vhosts/www.magmalinux.com dizini için <Directory> etiketleri arasında bazı ayarlar var. Sırayla incelersek: Options Indexes FollowSymLinks MultiViews satırı bu dizin için bir kaç seçeneği aktif etmiştir: Indexes: Eğer bu dizin içerisinde DirectoryIndex yönergesinde belirtilen dosya (varsayılan index.html) mevcut değilse, dizinin içeriğini gösteren otomatik bir index yaratılır (mod_authindex tarafından) ve istemciye cevap olarak gönderilir. FollowSymLinks: Apache ye bir sembolik link ile karşılaştığı zaman bu linki takip etmesini söyler. MultiViews: Diyelim ki, sunucunuzda /srv/www/vhosts/www.magmalinux.com altında bir ornek.php dosyası var ve siz bu dosyaya http://www.magmalinux.com/ornek seklinde de erismek istiyorsunuz (uzantıyı belirtmeden). MultiViews özelliği mod_negotiation modülünü kullanarak size bu desteği sağlar (Dikkat! Sunucuya http://www.magmalinux.com/ornek dosyasının isteği geldiğinde, istemcinin HTTP isteğinde gönderdiği Accept: değerine bakılarak, ornek dosyası aranır. Yani istemciniz HTTP isteğini gerçekleştirirken Accept: değerine sadece text/html girmiş ise, ornek dosyasına bakılırken, sadece ornek.html aranacak ve ornek.php bulunamayacak). Yukarıdakilerin dışında Options yönergesine belirtebileceğiniz seçenekler: ExecCGI: Aktif edildiği dizin içerisindeki çalıştırılabilir dosyaların, mod_cgi kullanılarak çalıştırılması sağlanır (Genelde bu seçenek, cgi-bin dizinleri için aktif hale getirilir). İlerleyen kısımlarda CGI kullanımı açıklanacaktır. Includes: Aktif edildiği dizin içerisinde, SSI (Server Side Include) dosyaları çalıştırabilmeye izin verir. SSI, Apache tarafından sunulan basit bir betik dili gibi düşünülebilir. Bu konu, belgenin ilerleyen bölümlerinde ayrıntılandırılacaktır. IncludesNOEXEC: SSI izni verilir fakat, SSI dosyaları içerisinden harici bir uygulama çağrılması yasaklanır. SymLinksIfOwnerMatch: FollowSymLinks ile benzerdir. Ancak, sembolik linkin bulunduğu dizinin sahibi, sembolik linkin gösterdiği dosyanın (ya da dizinin) sahibi ile aynı ise, sunucu sembolik linki takip eder (Bu özelliğin açık olması durumunda, Apache her istek geldiğinde dizinin ve işaret edilen dosyanın sahibi kontrol edileceği için, SymLinksIfOwnerMatch özelliği sunucuyu yavaşlatan bir özelliktir. Sembolik linkleriniz için bu güvenlik gerekmiyorsa FollowSymLinks özelliğini tercih edin). Tekrardan /srv/www/vhosts/www.magmalinux.com dizini için belirttiğimiz seçeneklere dönelim: seçeneği ise, hatırlandığı üzere, belirtilen dizin ve alt dizinleri için Apache nin.htaccess dosyasını yorumlamasını kapatır (Alt dizin için başka bir AllowOverride belirtilene kadar). Order allow,deny: Allow ve Deny talimatları ile anlamlıdır (Bu örneğimizde sadece Allow from all talimatı var). İzin sıralamasını belirler. Sıralama allow,deny ya da deny,allow olabilir. Eğer genel olarak erişime izin vermek, sadece belli durumlar için yasaklama getirmek istiyorsanız allow,deny sıralamasını; ya da eğer genel olarak erişimi yasaklamak, sadece belli durumlar için izin vermek istiyorsanız deny,allow sıralamasını kullanın. Allow from all: Allow talimatı dizine erişimine izin verilecek bilgisayarları belirler. İkinci parametresi daima from dur. Allow from all herkese izin verir. Alan adına (Ters DNS sorgusu gerektirir), IP adresine ya da bir çevresel değişkenin değerine göre erişim iznini ayarlayabilirsiniz. Ayrıntılarından ilerleyen kısımlarda bahsedilecektir. Dosyayı inceledikten sonra, şimdi sites-available daki bu siteyi işler hale getirmek için # a2ensite www.magmalinux.com komutunu kullanalım (ya da elle, sites-available dizinindeki magmalinux.com dosyasına sites-enabled dizininden sembolik link oluşturun). a2ensite komutuna verdiğimiz parametre, sites-available dizininde oluşturduğumuz dosyanın ismi olduğuna dikkat edin. Yapılan değişikliklerin etkili olabilmesi için Apache yi yeniden başlatmalıyız: # /etc/init.d/apache2 restart 2.2.2 www.magmalinux.net Alan adı için Sanal Konak www.dijitalders.com Apache Yönergeleri 3

Aynı Apache sunucusu içerisinde bir de magmalinux.net alan adı için hizmet verelim (Tekrar Dikkat! magmalinux.net alan adına gelen isteğin Apache ye ulaşabilmesi için öncelikle DNS sunucunuz bu alan adı için yapılandırılmış olmalı). Yine sites-available dizini altında www.magmalinux.net sanal konağı için ayarların duracağı www.magmalinux.net isminde bir dosya oluşturalım ve içeriğini aşağıdaki gibi dolduralım: <VirtualHost *:80> ServerName www.magmalinux.net ServerAlias magmalinux.net DocumentRoot "/srv/www/vhosts/www.magmalinux.net" <Directory "/srv/www/vhosts/www.magmalinux.net"> Options Indexes FollowSymLinks MultiViews Order allow,deny Allow from all </VirtualHost> <VirtualHost *:80> ServerName doc.magmalinux.net DocumentRoot "/srv/www/vhosts/doc.magmalinux.net" <Directory "/srv/www/vhosts/doc.magmalinux.net"> Options Indexes FollowSymLinks MultiViews Order allow,deny Allow from all </VirtualHost> Örnek olması açısından www.magmalinux.net dosyası içerisinde www.magmalinux.net ve doc.magmalinux.net olmak üzere iki tane sanal konak tanımladık. Şimdi www.magmalinux.net web sitesini aktif hale getirmek için: # a2ensite www.magmalinux.net # /etc/init.d/apache2 restart komutlarını çalıştıralım. 2.2.3 mod_vhost_alias Aynı Apache HTTP sunucusu altında çok fazla web sitesi varsa, her biri için yukarıdaki ayarları yapmaktan sıkılabilirsiniz. Şimdi bizi bu dertten kurtaracak olan mod_vhost_alias modülünü inceleyelim. Modülümüzü etkinleştirmeden önce mods-available dizini altında vhost_alias.conf dosyası oluşturalım. Bu dosyanın en basit içeriği şu şekilde olabilir: UseCanonicalName Off VirtualDocumentRoot /srv/www/vhosts/%0 VirtualDocumentRoot /srv/www/vhosts/%0 satırındaki %0, tam alan adını belirtmektedir (www.magmalinux.com, doc.magmalinux.net gibi). Eğer istenirse tam alan adının belli parçaları da kullanılabilir. Örneğin alan adının soldan ikinci parçası (magmalinux) belirtilmek isteniyorsa %2, sağdan 1. parçası (com) isteniyorsa %-1 ya da sondan 2 kısım (magmalinux.com) isteniyorsa %2+ kullanılabilir. Dosyayı kaydettikten sonra vhost_alias modülünü aktikleştirelim ve değişikliklerin geçerli olması için Apache yi yeniden başlatalım: # a2enmod vhost_alias # /etc/init.d/apache2 restart 2.3 Apache Yapılandırma Dosyaları Söz Dizimi Apache yapılandırma dosyalarında HTML elementlerine benzer, kendi içerisinde birden fazla yönerge içeren bazı yönergeler vardır (<Directory> gibi). Bu tip yönergelere kap (container) denir. Şimdi bunlardan bir kaçını inceleyelim. 2.3.1 <Directory> İşletim sisteminin dosya sistemindeki belli bir dizin ve onun alt dizinleri için yapılandırmaları (yönergeleri) tutar. Örneğin: <Directory /var/www> Options FollowSymLinks Dizin yolu içerisinde joker karakterde belirtebilirsiniz (Hatırlatma:? joker karakteri tek bir harf eşleşmesi için, * karakteri herhangi bir karakter dizisi için, [] karakterleri aralık için kullanılabilir. Yeri gelmişken / karakteri hiçbir joker karakteri ile eşleşmez). Örneğin: <Directory /srv/www/vhosts/*/doc> Options FollowSymLinks 2.3.2 <DirectoryMatch> DirectoryMatch, Directory ile hemen hemen aynıdır. Directory nin sağladıklarının yanında düzenli ifade desteği sağlar (Directory yi kullanarak <Directory ~ duzenli_ifade> şeklinde düzenli ifade belirtebilsekte, ve bu işlemin yeni yolu DirectoryMatch tir). Bir örnek www.dijitalders.com Apache Yönergeleri 4

incelersek: <DirectoryMatch "/srv/www/vhosts/^www.*com$"> Options FollowSymLinks </DirectoryMatch> Örnekteki düzenli ifade, www ile başlayan com ile biten dizinler ile eşleşecektir. 2.3.3 <Files> Bazı dosyalara özel yapılandırma yapmak için kullanılır. Örneğin: <Files gizli.html> Order deny,allow Deny from all </Files> Yukarıdaki yapılandırma, gizli.html dosyasının hangi dizinde olduğuna bakılmaksızın, bu dosyaya erişimi engeller. <Files /var/www/gizli.html> şeklinde belirtilse bile, dikkate alınacak kısım yolun son parçası olan gizli.html olduğu için yukarıdaki örnekten farkı yoktur. Eğer sadece belli bir dizin içerisindeki gizli.html dosyası ile ilgili yapılandırma yapmak gerekirse, <Files> kabı, <Directory> içerisinde kullanılabilir. Örneğin: <Directory /var/www> <Files gizli.html> Order deny,allow Deny from all </Files> 2.3.4 <FilesMatch> FilesMatch, Files ile benzer olmasına karşın, dosya ismi içerisinde düzenli ifade kullanabilmemizi sağlar (<Files> ile de <Files ~ duzenli_ifade> şeklinde düzenli ifade kullanabiliyor olsakta, düzenli ifade kullanmanın yeni yolu FilesMatch tir). Örnek bir FilesMatch kullanımı şöyle olabilir: <FilesMatch ".(png jpe?g png)$"> SetEnvIfNoCase Referer "^http://.*.magmalinux.(com net)" local=1 Order allow,deny Allow from env=local </Files> Yukarıdaki yapılandırma, gelen istekteki Referer adresi magmalinux.com ya da magmalinux.net değilse; png, jpeg ve png dosyalarına erişimi yasaklar. 2.3.5 <Location> Directory de olduğu gibi dosya sistemindeki kök dizinden başlayan dizinler için ayarlama yapmak yerine, Apache nin sunduğu web sitesinin kök dizininden başlayan dizinler için ayarlama yapmak istiyorsanız Location kullanabilirsiniz. Kısaca Location size, Apache nin sunduğu web sitesinin kök dizinini taban alıp, buna göreceli dizinler için ayarlamalar yapmanızı sağlar. Örneğin: <Location /cgi-bin> Options ExecCGI </Location> Yukarıdaki yapılandırma, işletim sistemindeki / dizinin altında cgi-bin dizini değil, Apache nin sunduğu web sitesinin kök dizini altındaki cgi-bin dizini içindir. <Location> benzeri, düzenli ifade belirtebildiğimiz bir de <LocationMatch> vardır. Kullanım şekli <FilesMatch> veya <DirectoryMatch> ile aynıdır. 2.3.6 Options Sanal konaklarımızı ayarlarken Options yönergesinden bahsetmiştik. <Directory> kabı ile bir dizin için belirttiğimiz özellikler, alt dizinlere de uygulandığından, bir dizin için birden fazla Options tanımlandığı durum oluşabilir. Örneğin: <Directory "/var/www"> Options Indexes <Directory "/var/www/altdizin"> Options Include ExecCGI Yukarıdaki örnekte /var/www/altdizin için kullandığımız Options yönergesi, üst dizindeki Options yönergesinin üzerine yazacak. Yani /var/www/altdizin için Indexes seçeneği aktif olmayacak. Eğer bir dizin için Options yönergesinde belirttiğimiz seçeneklerden birinin, üst dizindeki ayarlamalara eklenmesini istiyorsak, Options yönergesindeki o seçeneğin başına + işareti koymalıyız (eğer üst dizindeki ayarlamalardan çıkarılmasını istiyorsak başına - işareti koymalıyız). Örneğin: <Directory "/var/www"> Options Indexes MultiViews <Directory "/var/www/altdizin"> Options +Include +ExecCGI -MultiViews 2.3.7 Alias www.dijitalders.com Apache Yönergeleri 5

Bir web sitesinin kök dizini ağacının içerisinde bulunmayan bir dizini kök dizininin içerisine dahil etmeye yarar. Aslında temelde yaptığı şey, dosya sistemi içerisindeki bir dizin için web sitesi üzerinde bir takma ad tanımlamaktır. Örneğin: Alias /doc /usr/share/doc Yukarıdaki tanımı sites-available/www.magmalinux.com dosyası içerisinde <VirtualHost *:80> </VirtualHost> kapları arasında yaptığımızda, istemci http://www.magmalinux.com/doc içeriğini istediği zaman, cevap olarak /usr/share/doc içeriği gönderilir. Alias kullanırken dizin adreslerinin sonunda / karakteri olup olmamasına dikkat edin. Eğer Alias /doc/ /usr/share/doc biçiminde kullanılmış olsaydı, bu Alias http://www.magmalinux.com/doc isteği için geçerli olmazdı. Alias tanımında /doc kısmında sona / koymadığımızda, Alias hem /doc hem de /doc/ için geçerli olur. 2.3.8 AliasMatch Yaptığı iş Alias ile aynıdır. Takma ad için düzenli ifadeleri destekler. Örneğin: AliasMatch ^/doc-(.*) /usr/share/doc/ http://www.magmalinux.com/doc-apache2 adresine istek gelmiş ise, bu istek tanımladığımız alias ile eşlecek ve kullanıcıya /usr/share/doc/apache2 içeriği gösterilecek (Alias tanımındaki, parantez içindeki düzenli ifade ile eşleşen metni verir). 2.3.9 Redirect Belirlenen bir dosya (ya da dizin) istendiğinde istemciyi başka bir adrese yönlendirmeye yarar. Örneğin: Redirect /doc http://doc.magmalinux.net/ Ana apache ayar dosyalarında, <VirtualHost>, <Directory> etiketleri içerisinde ya da.htaccess dosyasında belirtilebilir. 2.3.10 RedirectMatch Redirect ile aynı olmasının yanında, düzenli ifadeleri destekler. Debian standart varsayılan web sayfasındaki (sitesavailable/default) örneğe bakalım: RedirectMatch ^/$ /apache2-default/ 2.4 Apache SSL Apache SSL servisimiz için ilk olarak sertifika oluşturmamız gerekiyor. Eğer elinizde satın aldığınız hazır sertifika varsa bu aşamayı atlayabilirsiniz. Biz bu örneğimizde, OpenSSL yazılımıyla 10 yıl boyunca geçerli olacak bir sertifika oluşturacağız: # openssl req -new -x509 -days 3650 -nodes -out apache.pem -keyout apache.pem komutunu çalıştırdığımızda karşımıza sertifikamız için bir takım sorular gelecek. Bu sorulardan bizim için en önemli olanları, PassPhrase ve CommonName. PassPhrase, sertifikamız için gireceğimiz parola (PassPhrase in Password den farkı, daha uzun olabilmesiydi. Eski UNIX lerde Password ün en fazla 8 karakter olduğundan, 8 karakterden uzun parolalara PashPhrase deniyordu), CommonName ise web sitemize erişilirken girilen alan adı bilgisi olacak (Örneğin www.magmalinux.com). Şimdi oluşan apache.pem dosyasını (ya da satın aldığımız sertifikayı) /etc/apache2/ dizinine kopyalayalım (apache.pem dosyasını /etc/apache2 dizinine kopyalamak gibi bir zorunluluk bulunmamaktadır. Biz sadece örnek olarak bu dizini seçtik. Farklı bir dizin kullanırsanız, ilerleyen kısımlardaki ayar dosyalarını kendinize göre değiştirmeniz gerekecek). Sıra, bu SSL sertifikasının kullanılacağı web sitesini yaratma kısmına geldi. Bunun için sanal konaklar kısmında edindiğimiz bilgileri hatırlayalım. Önce sites-available dizini altında bir dosya oluşturup (örneğin www.magmalinux.com-ssl), içini aşağıdakine benzer bir biçimde dolduralım: NameVirtualHost *:443 <VirtualHost *:443> ServerName www.magmalinux.com SSLEngine on SSLCertificateFile /etc/apache2/apache.pem DocumentRoot /srv/www/www.magmalinux.com #... #... </VirtualHost> Bu dosya da bizim için önemli olan SSLEngine ve SSLCertificateFile yönergeleri. Adlarından da anlaşılacağı üzere SSLEngine yönergesi, bu web sitesi için SSL i aktif ederken, SSLCertificateFile yönergesi de sertifika dosyasının yolunu belirtir. Son olarak ports.conf dosyamıza, Apache ye, HTTP üzerinden SSL bağlantısı için kullanılan varsayılan 443 numaralı portu dinlemesini söylüyoruz. Örnek ports.conf dosyamız: Listen 80 Listen 443 şeklinde olabilir. Bütün bu işlemler bittikten sonra, değişikliklerin geçerli olabilmesi için, Apache yi yeniden başlatalım: # /etc/init.d/apache2 restart 2.5 Dinamik İçerikli Web Sayfaları Temelde Web sunucusu, istemciden gelen isteklere göre, sunucuda bulunan bir dosyayı istemciye gönderirken, bu dosya içerisinde hiç bir değişiklik yapmaz. Dosya içeriklerinin statik olduğu bu durumda, çeşitli kullanıcılara özel ya da çeşitli durumlara özel, dinamik içerik oluşturmak söz konusu olamaz. Bu durum Web in kullanımı için büyük bir kısıtlamadır. 2.5.1 SSI SSI (Server Side Include - Sunucu Taraflı İçerik) dosyaları, sunucu tarafında dinamik içerik oluşturmanın en ilkel yoludur. SSI kullanılarak bir HTML dosyasına alt ve üst bilgi, sunucudaki bir uygulamanın çıktısı, çevresel değişkenlere erişim gibi bir takım ilkel dinamik içerik oluşturulabilir. SSI dosyalarının varsayılan uzantısı.shtml dir (Tabi uygun bir yapılandırılma ile başka bir uzantı da kullanılabilir). Apache nin SSI desteğini açmak için öncelikle mod_include modülünü aktif edelim: # a2enmod include www.dijitalders.com Apache Yönergeleri 6

Daha sonra web sitemiz içerisinde bir dizin oluşturup, bu dizin içerisinde SSI dosyalarının işlenmesine izin verelim. Bu örnek için www.magmalinux.com web sitesini seçelim. İlk olarak SSI dizinimizi oluşturalım: # mkdir /srv/www/vhosts/www.magmalinux.com/ssi Şimdi sites-available/www.magmalinux.com dosyasını açıp <VirtualHost *:80> </VirtualHost> kapları arasına aşağıdakileri girelim: <Location /ssi> Options +Includes </Location> Options yönergesindeki Includes seçeneğinin, belirtilen dizin için SSI desteğini aktifleştirdiğini hatırlayınız. Yaptığımız değişikliklerden sonra Apache yi yeniden başlatalım: # /etc/init.d/apache2 restart Şimdi yazacağımız SSI dosyalarının içeriğinden kısaca bahsedelim. Bir SSI dosyasının HTML dosyasından hiç bir farkı yoktur. SSI komutları HTML yorum satırları arasına yazılır. Bir SSI komutunun yapısı şu şekildedir: <!--#komut parametre="deger" --> Örnek bir deneme.shtml dosyası yazıp, /srv/www/vhosts/www.magmalinux.com/ssi/ dizinine kopyalayalım: <!--#include virtual="ust.html"--> <br /> Orta <br /> <!--#exec cmd="ls -F" --> <br /> <!--#include virtual="alt.html"--> include komutu başka bir dosyayı dahil eder. exec ise.shtml dosyası içerisinden harici bir uygulama çalıştırıp, uygulamanın çıktısını bu.shtml dosyasına yazar. exec komutunun sonucu olarak, sunucu tarafında çalışan bir uygulamanın çıktısı istemciye gönderilmiş olur. Bir başka komut olan echo belli bir çevresel değişkenin değerini almada kullanılır. Örnek kullanımı: <!--#echo var="remote_addr" --> SSI dosyaları içerisinde basit if-else ifadeleri de kullanabilirsiniz. Biz bu belge de bunun ayrıntısına girmeyeceğiz. SSI hakkında daha ayrıntılı bilgi almak için, mod_include - Apache HTTP Server adresine bakınız. 2.5.2 CGI CGI (Common Gateway Interface - Ortak Geçit Arayüzü) bize, sunucu tarafında uygulama çalıştırıp, bu uygulamanın çıktısının istemciye gönderilmesini ve istemciden bu uygulamaya bir takım verilerin aktarılmasını sağlar. Bu bize, kullanıcıya göre dinamik içerik oluşturmayı sağlar. CGI ın ilk günlerinde, CGI kelimesinin her geçtiği yerde Perl kelimesini görsekte; CGI ın Perl dili ile pek bir alakası yoktur. CGI bize, istemciden gelen bir takım bilgilerin sunucu tarafındaki harici bir uygulamaya aktarılıp, bu uygulamanın ürettiği çıktının istemciye geri gönderilmesini sağlar. Sunucu tarafında çalışacak, web üzerinden gelen isteklere göre davranacak harici uygulama yazılırken, yoğunlukla Perl dili kullanıldı. Sunucu tarafında çalıştırdığımız bu harici uygulama Perl dışında herhangi bir betik dili olabileceği gibi (PHP, Python, Ruby...), C ile yazılıp derlenmiş bir uygulama da olabilir (Zaten bir betik dilini çalıştırabiliyorsanız, bu betik dilini yorumlayacak olan uygulama makina koduna dönüştürülmüş bir uygulama olacağından; direk makina koduna dönüştürülmüş bir uygulamayı da çalıştırabilmek şaşırtıcı bir durum değil). Günümüzde, CGI ın tarihe gömüldüğü gibi bir yanlış anlayış vardır. CGI ın hızı PHP ve Java dillerinde yazılan web uygulamaları ile karşılaştırılır. CGI ın sunucu tarafında çalıştırdığı uygulama bir PHP ya da Java uygulaması da olabilir. Aslında CGI içerisinde, herhangi bir dilde yazılmış bir uygulamayı çalıştırmak ile PHP web uygulamasını çalıştırmak arasındaki tek fark, Apache sunucusunda php programlarına gelen her istek için ayrı bir php yorumlayıcısı çalıştırılmasını önleyen mod_php modülüdür. Bu sayede, aşırı istek alan bir web sunucusu her CGI isteği için ayrı bir PHP süreci başlatmayacağından, sunucunun belleği daha etkin kullanılmış olur. Şimdi sunucuda çalışacak harici programlarımızın bulunacağı dizin için gerekli Apache ayarlarını yapalım. Bunu sağlamanın iki yolu var. Birinci yol: Birinci yol için www.magmalinux.com web sitemizi kullanalım. Öncelikle cgi uygulamalarının bulunacağı dizini oluşturalım: # mkdir /srv/www/vhosts/www.magmalinux.com/cgi-bin Dizinin ismini cgi-bin olarak belirtmek zorunda değilsiniz. Biz geleneklere bağlı kalarak bu ismi seçtik. Şimdi sitesavailable/www.magmalinux.com dosyamızı açıp <VirtualHost *:80> </VirtualHost> kapları arasında herhangi bir yere aşağıdakileri girelim: ServerAlias /cgi-bin/ /srv/www/vhosts/www.magmalinux.com/cgi-bin/ ServerAlias, Alias a benzer biçimde davranır. Farkı ise, Apache ServerAlias ta belirtilen dizin içindekilerin hepsini çalıştırılabilir dosya olarak düşünür. Bu dizindeki herhangi bir dosyaya bir istek geldiğinde, Apache bu dosyayı çalıştırmayı dener. İkinci yol: İkinci yol için www.magmalinux.net sayfamızı kullanalım. İlk olarak, www.magmalinux.net sitemizin kök dizininde cgi-bin dizinimizi oluşturalım: # mkdir /srv/www/vhosts/www.magmalinux.net/cgi-bin Ardından, sites-available/www.magmalinux.net dosyamızda, <VirtualHost *:80> </VirtualHost> kapları arasına aşağıdakileri ekleyelim: AddHandler cgi-script.pl.cgi.rb <Location /cgi-bin> Options +ExecCGI </Location> www.dijitalders.com Apache Yönergeleri 7

AddHandler yönergesi, Apache ye.pl,.cgi ve.rb uzantılı dosyaları cgi-scripti olarak ele almasını söyler. Şimdi seçtiğimiz bu iki yöntemi de test etmek için, bir betik oluşturup hem magmalinux.com un cgi-bin dizinine hem de magmalinux.net in cgi-bin dizinine atalım. Aşağıda Ruby dilinde yazılmış örnek bir betik var, deneme.rb isminde kaydedip bahsettiğimiz cgi-bin dizinlerine kopyalayın: #!/usr/bin/ruby print "Content-type: text/html;nn" print "CGI deneme" Test için tarayıcınızla http://www.magmalinux.com/cgi-bin/deneme.rb ve http://www.magmalinux.net/cgi-bin/deneme.rb sayfalarını ziyaret edin. 2.6 Çok Kullanılan Apache Modülleri 2.6.1 mod_userdir mod_userdir, Apache nin yüklü olduğu sunucudaki sistem kullanıcılarının, kendi ev (home) dizinlerindeki dosyaları Apache üzerinden yayınlayabilmesini sağlar. mod_userdir modülünü aktif edelim: # a2enmod userdir Diyelim ki, Apache nin yüklü sistemimizde, dogan isminde ev dizini /home/dogan olan bir kullanıcı var. Bu kullanıcının ev dizini içerisinde bir public_html dizini oluşturalım (dogan kullanıcısının ev dizininde işlem yaptığınızdan bu işlemi dogan kullanıcısı iken yapın): $ mkdir /home/dogan/public_html Şimdi bu dizine bir kaç dosya kopyalayıp, tarayıcımızla http://www.magmalinux.com/~dogan/ sayfasını ziyaret edelim. mod_userdir ile ilgili ayarlama yapmak istiyorsanız (dizin için public_html yerine başka bir isim kullanmak gibi) /etc/apache2/modsavailable/userdir.conf dosyasını düzenleyin. Varsayılan ayarlarıyla userdir.conf dosyası aşağıdakine benzer bir biçimdedir: <IfModule mod_userdir.c> UserDir public_html UserDir disabled root <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch </IfModule> <IfModule> </IfModule> içerisindeki ilk satır, UserDir public_html, yayınlanmak üzere kullanıcıların ev dizinininde aranacak dizinin ismini belirtir (Bu adı değiştirdiğiniz taktirde, takip eden satırlardaki <Directory> yönergesini de uygun şekilde değiştirin). Bu satırda boşluklarla ayrılmış birden fazla dizin ya da URI belirtebilirsiniz. Apache, bir istek geldiğinde belirttiğiniz sıra ile aramaya başlayacak. mod_userdir modülünü belirli kullanıcılar için kapatmak istiyorsanız (yukarıdaki örnekte olduğu gibi), UserDir disabled root ahmet mehmet şeklinde boşluklarla ayırarak belirtebilirsiniz. Ya da mod_userdir modülünü sadece belli kullanıcıların kullanabilmesini istiyorsanız: UserDir disabled UserDir enabled dogan enes şeklinde kullanabilirsiniz. 2.6.2 mod_rewrite mod_rewrite modülü, istekte bulunulan URL yi düzenli ifadeler ile karşılaştırıp oldukça esnek yönlendirme kuralları tanımlamamızı sağlar. mod_rewrite ı aktif edelim: # a2enmod rewrite Deneylerimizi www.magmalinux.com sitesi üzerinde yapalım. Bunun için sites-available/www.magmalinux.com dosyamızı açıp, rewrite modülümüzü bu site için aktif hale getiriyoruz. Aşağıdaki satırı <VirtualHost *:80> </VirtualHost> etiketleri arasına ekleyelim: RewriteEngine On Test için yukarıda yazdığımız satırın altına, aşağıdaki kuralları ekleyelim: RewriteRule ^/ping* /pong [R] RewriteRule ^/user/(.*)$ /index.php?user= İlk kuralımız, http://www.magmalinux.com/ping adresi isteklerini, http://www.magmalinux.com/pong adresine yönlendirecek. Sonraki [R] bayrağı, bu işlemin istemci tarafında yapılacağını belirtir. Yani istemci http://www.magmalinux.com/ping adresini istediği zaman, Apache cevap olarak bu sayfanın taşındığını (302 Moved) ve taşındığı adresi (http://www.magmalinux.com/pong) söyler. Tarayıcı da buna göre yeni adrese gider. İkinci satırdaki örnek ise http://www.magmalinux.com/user/dogan gibi bir isteği http://www.magmalinux.com/index.php?user=dogan a dönüştürür (ikinci satırdaki, parantez içindeki düzenli ifade ile eşleşecek metin ile yer değiştirir. Birden fazla parantez ile gruplanmış düzenli ifadeniz varsa, bunlarla eşleşen metinleri, düzenli ifadedeki sıralarıyla,,... referanslarını kullanarak elde edebilirsiniz. Ayrıntılı bilgi için, bir düzenli ifadeler kaynağına başvurun). Bu tip yönlendirmeleri kullanarak, web uygulamalarınız için çok daha temiz görünen URI ler tanımlayabilirsiniz. mod_rewrite ı kullanırken logları takip etmek faydalı olabilir. mod_rewrite logları için log dosyasını ve log seviyesini aşağıdaki gibi ayarlayabiliriz (Ana ayar dosyaları ya da <VirtualHost> etiketi içerisinde): RewriteLog "/var/log/apache2/rewrite_log" RewriteLogLevel 3 www.dijitalders.com Apache Yönergeleri 8

2.7 Apache Çoklu Süreç Modülleri (Multi-Processing Module - MPM) Apache MPM ler, Apache nin aynı anda birden fazla isteği sunucu tarafında nasıl gerçekleştireceği ile ilgili yöntemler sağlar. Her yeni gelen için ayrı bir süreç mi (process) ya da ayrı bir thread mi başlatılacağı kullanılan MPM e bağlıdır. 2.7.1 MPM Prefork Prefork MPM i, Apache 1.3 te olduğu gibi, her gelen istek için ayrı bir süreç yaratır. Bu yüzden diğerlerine göre yavaş olsa da, bu MPM in avantajı kararlılıktır. Her gelen isteği ayrı bir süreç cevapladığından, istekler birbirinden iyi bir şekilde yalıtılmıştır. Bu yüzden herhangi bir istekteki sorun, bir diğer isteği etkilemeyecektir. Uygulamalarında thread-safe olmayan kütüphaneler kullanan web siteleri için uygundur. Ayrıca, PHP uygulamaları yayını yapacaksanız, Prefork MPM ini kullanmalısınız. apache2.conf dosyasındaki Prefork MPM inin ayarlarına göz atalım: <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> StartServers: Apache nin başlatılması sırasında oluşturulacak çocuk süreç sayısını belirler. MinSpareServers: Herhangi bir anda gelebilecek isteklere karşı hazır, boşta bulunan minimum çocuk süreç sayısını belirler. Bu sayıdan az boşta bekleyen çocuk süreç olduğu durumda, Apache ana süreci boşta beklemesi için yeni çocuk süreçler yaratır. MaxSpareServers: Herhangi bir anda gelebilecek isteklere karşı hazır, boşta bulunan maximum çocuk süreç sayısını belirler. Bu sayıdan fazla boşta bekleyen çocuk süreç olduğu durumda, Apache ana süreci fazla olan süreçleri öldürür. MaxClients: Aynı anda hizmet verilecek istek sayısını belirler. Bu sayıdan fazla istek geldiğinde, bu istekler kuyruğa alınır (Kuyrukta bekletilecek maksimum istek sayısını ListenBacklog yönergesi ile ayarlayabilirsiniz). MaxRequestsPerChild: Tek bir çocuk sürecin ömrü boyunca cevap verebileceği maksimum istek sayısını belirler. 0 değeri sınırsız anlamına gelir. 2.7.2 MPM Worker Melez yapıya sahip bir MPM dir. Her gelen istek için thread kullanmasının sağladığı hız ve hafızanın etkin kullanımı yanında, çoklu süreç yapısı sayesinde kararlılığını korur. Her süreç, isteklere cevap veren birden fazla threade sahiptir. Özellikle yüksek trafiğe sahip sunucularda kullanılması tavsiye edilir. Ayrıca, Debian da varsayılan MPM dir. apache2.conf dosyasındaki Worker MPM inin ayarlarına göz atalım: <IfModule mpm_worker_module> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> StartServers: Apache nin başlatılması sırasında oluşturulacak çocuk süreç sayısını belirler. Bu süreçlerden her biri ThreadsPerChild yönergesinde belirtilen kadar threade sahip olacaktır. MaxClients: Aynı anda hizmet verilecek istek sayısını belirler. Bu sayıdan fazla istek geldiğinde, bu istekler kuyruğa alınır. MinSpareThreads: Bütün süreçlerdeki toplam, minimum boştaki thread sayısını belirler (her sürecin sahip olması gereken boştaki minimum thread sayısını değil). Bu sayıdan az boşta bekleyen thread olduğu durumda, Apache bu sayıya ulaşana kadar yeni süreçler yaratır. MaxSpareThreads: MinSpareThreads e benzer şekilde, boştaki maksimum thread sayısını belirler. ThreadsPerChild: Süreç başına yaratılacak thread sayısını belirler Yönergeler AllowOverride Yönergesi AllowOverride yönergesi, <Location>, <DirectoryMatch> veya <Files> bölümlerinde değil, sadece düzenli ifade içermeyen <Directory> bölümlerinde geçerlidir. Yönergeye değer olarak None belirtilirse.htaccess dosyaları tamamen yok sayılır. Bu durumda, sunucu dosya sisteminde rastladığı.htaccess dosyalarını okumaya dahi çalışmayacaktır. Bu yönergeye All değeri atanırsa,.htaccess bağlamında kullanılabilecek her yönergeye.htaccess dosyalarında izin verilir. İki sebepten ötürü htaccess dosyalarına izin vermek istemeyebilirsiniz: Birinci neden, size kaybettireceği performanstır. Apache bir dizinde.htaccess dosyası olmasa bile, bu dosyanın var olup olmadığını kontrol ederken vakit harcayacaktır ve her istek geldiğinde bu dosyanın içeriği tekrardan okunacaktır. Ayrıca Apache,.htaccess desteği verilmiş bütün üst dizinlerdeki htaccess dosyalarını kontrol edecektir (Örneğin /var/www/doc/ dizininin içindeki bir dosyaya istekte bulunulduğunu ve / dizinin bile.htaccess desteği olduğunu düşünelim. Apache sırasıyla /.htaccess, /var/.htaccess, /var/www/.htaccess, ve /var/www/doc/.htaccess dosyalarını okuyacaktır). İkinci neden ise,.htaccess dosyası içerisinde gereğinden fazla yetki verdiğinizde (AllowOverride All gibi) oluşabilecek güvenlik www.dijitalders.com Apache Yönergeleri 9

sorunlarıdır. Kaynaklar http://forum.whmdestek.com/site-server-genel/5429-2-apache-yapilandirmasi.html http://httpd.apache.org/docs/2.2/tr/mod/quickreference.html www.dijitalders.com Apache Yönergeleri 10