Ubuntu – Apache Rewrite Modulü Kurulumu (Etkinleştirilmesi)

Merhaba,

Ubuntu platformunda rewrite kurulumunu(etkinleştirilmesi) anlatacağım. İşinize yarayacaktır diye düşünüyorum. (apache kurulu varsayılmıştır)

Ne işe yarar bu modül?

Apache web sunucusunda URL yi yeniden yazma ve düzenleme iznini verir.

Tam olarak ne işe yaradığını öğrenmek için arşivimizdeki bu yazıyı okumanızı tavsiye ediyorum.

sudo a2enmod rewrite

Yukarıdaki komutu çalıştırarak modülü etkinleştiriyoruz. Daha sonra ilgili projenizin vhost dosyasında birkaç düzenleme yapmamız gerekecek.

sudo nano /etc/apache2/site-available/default

Açılan vhost dosyasında aşağıdaki değişiklikleri yapmanız gerekiyor. İlk açtığınızdaki durumunu ve yanına okla yapmanız gereken düzenlemeyi belirtiyorum.

AllowOverride None -> AllowOverride All

Görmüş olduğunuz tüm “AllowOverride None” ları “AllowOverride All” a çeviriyoruz ve kaydedip çıkıyoruz. Son olarak apache‘yi yeniden başlatacağız.

sudo /etc/init.d/apache2 restart

Modül artık aktifleşti. Projenizde kullanabilirsiniz, hayırlı olsun.

child pid … exit signal Segmentation fault (11) – cpanel – centos

Centos 5.5 içinde cpanel yüklü sistemde child pid … exit signal Segmentation fault (11)hatası almaktaydım. Her yerde memory’nin yetmediğini belirten , diskin tutarsız olduğunu felan söyleyen yazılar gördüm.

Bu hatayı , apache nin error loglarından görebiliyordum, son kademe log olarak burada yakalayabildim. Ancak bir detay vermiyordu.

Php 5.2 sistem, mysql 5.1 kullanıyorum.

Daha sonra hatayı tespit etmek için tüm veritabanını local bilgisayarıma aktardım, ve aynı hatayı almaya çalıştığımda, windows ortamında , (php5.3, mysql 5.5) bana “Maximum function nesting level of ‘100’ reached” diye bir hata verdi. Yani diyor ki, “içiçe 100den fazla derinliğe kadar indin, sınıra ulaştın”. Anladığım kadarıyla, php5.2 de bunu handle edebilecek bir mekanizma yok. Hatanın sebebi , sınıf içinde recursive olarak kendi sınıfından üreten bir metodun es kaza yanlış çalışması durumu vardı. Şöyle :

class X{
    function load(){
        //...bişeyler bişeyler...
        $this->load();
    }
}

Nitekim, koddan bu tarz bir döngü oluşturabilecek durumun önüne geçtim, ve hata düzeldi.

 

htpasswd sifre olusturmak ve ayarlamak

Herhangi bir yerde bir dosya olusturun.
Bu linki kullanarak (kullanıcı adı ve şifre gireceksiniz) oluşacak datayıyeni açtığınız dosya içine kopyalayıp kaydedin.

Şimdi Apachenin bu dosyayı ilgili sitemiz için görmesini sağlayalım.

2 yöntem var.

1. HTACCESS dosyası yardımıyla htpasswd ayarlamak

.htaccess dosyasının içinden yapabiliriz. Bunu anlatan bir sürü site var. (biri budur).

2. HTTPD.Conf içerisinden htpasswd ayarlamak

ilgili klasörü tagiyle apache ye tarif edelim. İçinde de htpasswd dosyasını gösterelim.
Linux :
<directory “/var/www/sites/deneme”>
AuthName “sifre giriniz”
AuthType Basic
AuthUserFile /var/www/sites/deneme/htpasswd_olan_dosya_adi
require valid-user

</directory>

Windows :
Windowstaki tek fark, dosya yollarının başında disk sürücünüzü yazmaktır.
<directory “D:/web/deneme”>
AuthName “sifre giriniz”
AuthType Basic
AuthUserFile D:/web/deneme/htpasswd_olan_dosya_adi
require valid-user

</directory>

Daha sonra da , apache’mize restart attıktan sonra, işlem tamamlanmış olur.

database – mysql persistent connection nedir?

Persistent connection nedir?

Persistent connection, bağlantının sürekli açık tutulduğu bağlanma biçimine denir.

Normal olarak, yazılım dilleri bir veritabanına bağlanacağı zaman, bilgisayardaki bir port üzerinden veritabanına bağlantı açar. Daha sonra kodun sonunda, veya isteğe bağlı bir yerine bağlantıyı kapatır. Ayrıca connection kapatılmadıysa, yazılım dillerinde otomatik kapatma seçenekleri de bulunmaktadır. Örneğin 5 sn sonra kapat, 10 sn sonra kapat, biter bitmez kapat gibi seçenekler mevcuttur.

Persistent connection ın avantajları

Veritabanı bağlantısının otomatik. olarak açılıp kapatılması, en az ayar gerektiren şey olabilir. Ancak performansınızı persistent connection ile artırabilirsiniz.

Bir web sayfası isteği geldi diyelim. Yazılım dili kodu çalıştırdı. Varsayalım ki 1 Query gerekti bu sayfa için.
1- Hazırda bir bağlantı yok. İşletim sisteminden ilgili portu kullanmak için müsade istedi.
2- Daha sonra ilgili porta bağlandı.
3- Sonra querysini çalıştırdı.
4- Sonucunu ilgili porttan okudu.
5- Kod bitince de mysql bağlantısını kapattı.

persistent connection bu noktada, 1. aşamayı hızlandırır, 2. aşamayı direkt ortadan kaldırır, 4. aşamayı hızlandırır ve 5. aşamayı ortadan kaldırır.

Baktığımızda query önemli bir maliyet olabilir tabi ki querysine göre değişir ancak, yüklü bir serverda bahsettiğim durumun bariz hız kazandıracağı aşikar.

—-
Persistent connectionın diğer bir avantajı da , yüksek load altında, saçmalayan bir yapıya müsade etmemesidir. Persistent connection sayınızı yazılım dilinden ayarladığınızda, diyleim ki 200 verdiniz, sitenize aynı anda 1000 kişi bile gelse, serverinizin stabilliğini korur. Otomatik olarak bir sürü bağlantı açtırsaydık, bunları yönetmemiz imkansız olacaktır. (tabi kullanıcılar mysql bağlanamadı hatası alırlar, ancak siteniz çökmez bu daha önemlidir, en önemlisi de sistemi ince ayar yaparak bu ihtiyaçları da karşılayabilir hale getirmeniz sizin elinizdedir.)

Mysql olarak anlattık hep, mysql de persistent connection kullanmanız inanılmaz kolay. tek yapacağınız mysql_connect yerine mysql_pconnect kullanmanız. Bir de eğer mysql_close kullanıyorsanız, bunlar kodunuzdan kaldırmanız. (tabi ki başka bir database e bağlanacaksanız o ayrı durum)

—–
Bu sadece mysql için değil hemen hemen tüm veritabanlarında ortak olan bir özelliktir.

Hele ki database serverini ayrı bir server olarak kullanıyorsanız, ve bu makina sadece database e özel bir makina ise şiddetle tavsiye ederim. Ben aktif olarak mysql ve mongoda persistent connection kullanıyorum.

dipnot : Mysql ve Mongo persistent connectionları için PHP’de mod_php ile Apache ‘yi tercih etmeyiniz. Nginx veya lighthttpd yanında kurulu bir phpfcgi(php fast cgi), yüksek load altında apacheden hem çok daha stabil çalışıyor, hem de performans olarak %500 den fazla hızlı çalışıyor. En önemlisi, yapacağınız ayarları “DOĞRU” olarak çalıştırıyor.

linuxta virtual host ayarları (apache virtual hosts settings)

Apache’yi yüklediğinizi varsayarak, sanal sunucu (virtual host) ayarlarını nasıl yapacağımıza bakalım.

Virtual host’un ne işe yaradığına kısaca değinecek olursak, tek bir apache web sunucusu üzerinde birden çok domain barındırmaya yarar. Tek bir IP adresi ile birden fazla domaine sahip oluruz. Buna da isim bazlı sanal sunucu (name-based virtual hosts) denir.

Farklı IP adresleriyle farklı domainlere sahip olmak (IP-based virtual hosts) için ayrı bir konfigürasyon gerekmektedir. Biz şimdi isim bazlı sanal sunucular dediğimiz ayarlara bakalım.

İlk olarak yaptığımız web sitesi çalışmalarını tutacağım klasör yolu; /home/khantunckale/sites/ . Yazının devamında web sitelerini barındıracağım klasör burası olacak, kendi çalışmalarınızı nerede barındıracaksanız dosya yolunu ona göre ayarlayınız.

/home/khantunckale/sites/ klasörü içine test adında bir klasör oluşturuyoruz.

sudo mkdir sites/test

Daha sonra deneme amaçlı olarak test klasörü içerisinde bir tane index.html oluşturalım.

sudo gedit sites/test/index.html

Editörümüzde basit bir html dosyası oluşturduktan sonra kaydedip kapatıyoruz. Şimdi test klasörü içerisindeki index.html dosyasını browserımızdan http://test/ olarak nasıl çağıracağımızı ayarlayalım.

Apache ayarlarını yapmak için ilk olarak /etc/apache2/sites-available klasörü içerisindeki default dosyasındaki ayarları test adında başka bir dosyaya kopyalıyoruz.

cd /etc/apache2/sites-available
/* terminalde işlem yapacağımız dizini değiştiriyoruz */

sudo cp default test
/* default dosyasını cp komutu ile test dosyasına kopyaladık */

Şimdi test dosyasını açıp, default dosyasından farklı olması gereken yerleri düzenliyoruz.

sudo gedit test

Değiştireceğimiz satırların hangileri olduklarını inceleyelim. Öncelikle ServerAdmin satırının hemen altına ServerName test satırını ekliyoruz. Bu bizim browser üzerinden siteyi çalıştıracağımız isimdir, default dosyasında bu satır yok.

İkinci değiştirmemiz gereken satır DocumentRoot /var/www satırı. Biz burada /var/www yerine web uygulamamızı nerede barındıracaksak o klasörün yolunu yazıyoruz. Bizim örneğimizde bu klasör /home/khantunckale/sites/test

Üçüncü olarak değiştirmemiz gereken satır ise Directory /var/www/ satırı. Burayı da bir önceki değişikliği yaptığımız satırdaki gibi /var/www/ kısmını /home/khantunckale/sites/test/ olarak değiştiriyoruz. Şimdilik bu test dosyasında başka bir değişikliğe ihtiyacımız yok. Değiştirdiğimiz satırları kod olarak da yazayım.

ServerName test /*Bu satır default dosya içerisinde yok*/
/*Browserımızdan hangi isimle çağırmak istiyorsak ServerName olarak onu yazıyoruz */

DocumentRoot /home/khantunckale/sites/test /*Bu satır default olarak /var/www şeklinde.*/
/*Bunu biz web uygulamamızın bulunduğu klasör olarak değiştiriyoruz, bizim örneğimizde /home/khantunckale/sites/ */

Directory /home/khantunckale/sites/test/ /*Bu satır default olarak /var/www şeklinde.*/
/*Bunu da /home/khantunckale/sites/test/ olarak değiştiriyoruz */

Şimdi gelelim bilgisayarımızın /etc/hosts dosyasında yapacağımız değişikliklere.

Öncelikle terminalde bulunduğumuz dizini değiştirmek için cd ~ yapıp enterlıyoruz (böylece en üst dizine geçiyoruz.).
Sonrasında sudo gedit /etc/hosts diyerek metin editörümüzde bu dosyayı açıyoruz.

Dosyanın içerisinde

127.0.0.1	localhost
127.0.1.1	ubuntu.ubuntu-domain	ubuntu

satırının altına 127.0.0.1 test satırını ekliyoruz ve kaydedip kapatıyoruz.

Yapmamız gereken son bir işlem daha var. Yaptığımız sitenin domainini apache’ye bildiriyoruz. Ardından da apache’yi restart ediyoruz.

sudo a2ensite test

sudo /etc/init.d/apache2 reload

Artık browserımızın adres satırına http://test/ yazdığımızda /home/khantunckale/sites/test/ klasörü, dolayısıyla onun içerisindeki index.html dosyası açılacak.