|
|
Apache CLI ile ASP.NET Sayfaları Çalıştırma
|
Apache HTTP projesinin altında son zamanlarda CLI adlı yeni bir alt başlık belirdi. Bu alt proje Microsoft Windows üzerinde çalıştırılan Apache web sunucularında Microsoft'un .NET CLR özelliği kullanılarak ASP.NET uygulamaları çalıştırmanızı sağlamakta. Apache sunucusu üzerinde ASP.NET sayfaları çalıştırma ile ilgili detaylar için haberi okuyunuz.
|
.NET
ve IIS 6.0 sürümü ile Microsoft web sunucusu pazarında Apache’’nin tahtını tehtid
etmeye başladı. Bugün hala bağımsız organizasyonların yaptığı araştırmalar Apache
sunucusunun en çok kullanılan sunucu olduğunu göstermekte. Gerek güvenlik nedenleriyle
olsun gerekse tüm sistemler üzerinde yüksek performans ile çalışması Apache’’nin
başlıca tercih edilme sebeplerinden. Apache esasında sadece basit bir web sunucusu
değil Apache Foundation altında bir çok alt projeleri bulunmakta, bunlardan
başlıcaları HTTP (web sunucusu projesi), ANT (Java derleme aracı),
JAKARTA (Apache üzerinde Java çözümleri sağlamakta), TOMCAT (Jakartanın
alt projesi ve Java Server Pages uygulamalarının çalışmasını sağlamakta), vs
... Tüm projeler için www.apache.org sitesini
ziyaret edebilirsiniz.
Apache
HTTP projesinin altında son zamanlarda CLI adlı yeni bir alt başlık belirdi.
Bu alt proje Microsoft Windows üzerinde çalıştırılan Apache web sunucularında
Microsoft’’un .NET CLR özelliği kullanılarak ASP.NET uygulamaları çalıştırmanızı
sağlamakta. Bunu ufak bir aracı modül gerçekleştirmekte ( mod_aspdotnet ). Açık
kodlu olan bu modül Apache.Web kütüphanesi içerisinde System.Web.Host ve System.Web.Request
arayüzlerini kullanarak Apache web sunucusu için CLR ASP.NET motoruna erişim
kapısı açmaktadır. Bu anlamda ASP.NET ’’in IIS üzerinde size fonksiyonalite olarak
sağladığı tüm özellikleri Apache üzerinden uygulama esnasında temin edebilmektesiniz.
Fakat geliştirme sürecinde hata ayıklama husunda sadece size web arayüzü sağlamakta
buda zaten ASP.NET motorunun bir özelliği. Proje demin de bahsettiğim gibi henüz
yeni ve Visual Studio ile hali hazır bir entegrasyonu bulunmamakta.
Performans
konusunda bir çok kişi tereddütlü fakat direkt olarak mod_aspdotnet ASP.NET
motoruna erişmek için bir arayüz sağladığından ASP.NET motorunun performansı
ile doğru orantılı çalışmakta. Keza ASP.NET sayfalarının ilk çalıştıklarında
derlenmesi ve sonra hafızadan çalıştırılması gibi özellikler zaten ASP.NET motoru
tarafından sunulmakta bu durumda IIS ile Apache arasında ASP.NET projelerinin
koşturulması konusunda büyük bir ayrım ortaya çıkmıyor. Aynı zaman da IIS’’in
sunduğu uygulama havuzları optimizasyonunu Apache tarafında da gerçekleştirmek
mümükün. Şuan için aspdotnet modülünün sadece .NET Framework 1.1 desteği bulunmakta
fakat Microsoft’’un 2.0’’ı sürmesi ile beraber .NET Framework 2.0 desteği de eklenecek.
Bir
çok kişinin aklında "Peki ya Mono projesi?" sorusu gelmekte. mod_aspdotnet’’in
amacı sadece Microsoft Windows platformu üzerinde .NET Framework kaynaklarına
Apache üzerinden ulaşabileceğimiz bir arayüz sağlamak. Bu anlamda .NET Framework’’un
platform bağımsız implementasyonu olan Mono projesi ile çakıştığı bir durum
bulunmamakta.
Kurulum
http://httpd.apache.org/cli/
Adresinden güncel kurulum dosyasını edinebilirsiniz. Bu noktada şunu belirtmekte
fayda görüyorum asp_dotnet modülü Apache 2.0 handler spesifikasyonlarına göre
geliştirildiğinden 2.0 öncesi sürümlerinde çalşmamaktadır. Kurulum esnasında
Apache’’nin çalıştığı klasörünü göstermeniz yeterli. Ardından httpd.conf konfigrasyon
dosyasında Modüller bölümünde aşağıdaki değişiklikleri yapmanız gerekmekte.
LoadModule
aspdotnet_module modules/mod_aspdotnet.so
AddHandler asp.net asax ascx ashx asmx aspx axd config cs csproj licx rem
resources resx soap vb vbproj vsdisco webinfo
AspNetMount / "C:/Apache/Apache2/htdocs"
AliasMatch /aspnet_client/system_web/(\d+)_(\d+)_(\d+)_(\d+)/(.*)
"C:/Windows/Microsoft.NET/Framework/v$1.$2.$3/ASP.NETClientFiles/$4"
Options FollowSymlinks
Order allow,deny
Allow from all
|
- LoadModule
komutu Apache için genel bir komuttur ve aspdotnet_module modülünün dinamik
olarak yüklenmesini sağlar.
- AddHandler
komutu Apache için genel bir komuttur aspx, asax, vs .. gibi dosya uzantılarının
hangi modül tarafından ele alınacağını tanımlar.
- AspNetMount
komutu aspdotnet_module modülüne özel bir komuttur ve bu modül sağlıklı yüklenmedikçe
bu komut geçerli olmaz dolayısı ile çalıştırma zamanında hata verir.
Bu komutun amacı hangi sanal dizinde fiziksel olarak hangi klasörde aspdotnet_module
’’ün aktif olacağını belirtmektedir. Yukardaki tanım kök dizininden başlayarak
tüm klasörlerde aspdotnet_module ’’ünün çalışabileceğini belirtmektedir.
- AliasMatch
komutu çalışması için mod_alias ’’a ihtiyaç duyar moduller bölümünden alias_module
’’ün tanımlandığından emin olmalısınız.Bu komut ASP.NET tarafından kullanılan
javascript dosyaları "ASP.NETClientFiles" için sanal dizin adreslemesi
yapmaktadır. Hemen altındaki Directory tanımıda bu klasörü yetkilendirilmesi
gerçekleştirilmektedir.
Eğer her klasörde
index.aspx veya default.aspx dosyasının tanımlı çalışmasını istiyorsanız DirectoryIndex
komutuna aşağıdaki gibi ekleme yapınız.
DirectoryIndex
index.php index.html index.html.var index.aspx default.aspx |
aspdotnet_module’’ün
sağlıklı çalışmasını kontrol etmek için basit bir aspx dosyası deneyebilirsiniz.
Eğer hata ile karşılaşırsanız lütfen logs klasörü altındaki error.log’’u kontrol
ediniz. En çok karşılaşılan Internal Server Error hatası için error.log’’da aşağıdaki
gibi bir uyarı göreceksiniz.
[Sat
Jun 04 10:19:58 2005] [error] [client 127.0.0.1] mod_aspdotnet: Forbidden, Options
ExecCGI is not set for: C:/Apache/Apache2/htdocs/test.aspx
Hatanın da belirttiği
gibi aspdotnet modülünü çalıştıracağımız klasörlere ExecCGI (CGI çalıştırma)
izni vermemiz gerekmekte. Zaten yukarda da anlattığım gibi bu modül bize bir
arayüz sağlamakta bu şu anlama geliyor Apache uygulamanın güvenliğini denetleyemiyor;
çalışma zamanında sağlanacak güvenlik Microsoft Windows tarafında ASP.NET motoruna
ve işletim sistemine ait olduğundan, aspdotnet modülü sadece girdileri ASP.NET
motoruna iletiyor ve çıktıları kullanıcıya geri iletiryor buda bu modülün CGI
özelliği taşıdığını gösteriyor. Bu neden den aspdotnet modülü çalıştıracağımız
klasörlere Apache konfigrasyonu tarafında ExecCGI izni vermemiz gerekiyor. Bunuda
aşağıdaki şekilde gerçekleştirebiliriz.
Options Indexes FollowSymLinks ExecCGI
AllowOverride None
Order allow,deny
Allow from all
|
PS: Aynı
anda IIS ve Apache sunucularını çalıştırmanız ancak üzerinde çalıştıkları port
değişimi ile mümkün olmaktadır. Normalde istemci talepleri HTTP aracılığı ile
80 port ’’dan ele alınmaktadır bu durumda iki sunucu da 80 portu dinlemek istediğinden
işletim sistemi buna izin vermeyecektir bu yüzden servis sıralamasından önce
çalışan sunucu port’’u alacak diğer sunucu hata verip kapanacaktır. Bunu IIS’’de
EventLog’’dan Apache’’de error.log dosyasından takip edebilirsiniz. Fakat Apache
Konfigrasyon dosyası olan httpd.conf dosyasında Listen komutu için geçerli portu
8080 belirterek üzerinde çalıştığı portu değiştirebilir ve Apache sunucusuna
http://localhost:8080 ’’den ulaşabilirsiniz.Aynı
şekilde IIS sunucusu tarafında da yönetim panelinden çalıştığı portu değiştirmek
mümkündür.
Komut satırı:
IIS’’i durdurmak için komut satırına: net stop iisadmin yazabilirsiniz.
Apache’’i başlatmak için komut satırına: net start apache2 yazabilirsiniz.
|
|
|
|
|
SON 10 Haber
|
|