Konular
EBooklar

PHP tabanlı bir web siteniz varsa linux sunucularda host edildiğini biliyorsunuz demektir. Ancak pek az kişi linux sunucunun türünden haberdardır ve php nin sunucuya nasıl bir modda çalıştığını bilir.Eğer ciddi bir web sitesi yönetiyorsanız ve yüksek performans istiyorsanız o zaman apache sunucusunun ve php nin ayarlarının iyi yapıldığından emin olmanız gerekir.

Bildiğiniz gibi php sunucu tarafında çalışır, kullanıcı php tabanlı bir web sitesine girdiğinde sunucu web sitesindeki php kodları yorumlar ve sonuçları tarayıcınıza getirir.

bu yorumlama ise hangi php kütüphanesi kullanıldığına bağlı olarak değişir. Php handler ları php nin sunucuya nasıl yükleneceğini belirler. 
Yani her handler php kodlarının çalışması için gerekli kütüphaneleri içerir, hepsinde farklıdır ve bu farklarda php nin performansını etkiler. Dolayısıyla her handler php yi farklı şekilde yükler bu da uygulamanın türüne göre değişik sonuçlar verir.

Php handler ların birbirlerinden üstünlükler ve zayıf kaldıkları noktalar vardır. Seçimizi belirleyecek şey ise; 

  • hangi uygulamaları çalıştıracaksınız ?
  • hangi modüllere ihtiyacınız var ?
  • uygulamanız hangi php versiyonuna göre hazırlanmış ?
  • Sizin için sistem kaynaklarının tasarruflu kullanılmasımı yoksa tek amaç performan mı?
  • Sunucuda birden çok web sitesimi host edeceksiniz, yoksa tek bir sitemi ?
  • Host edilecek siteler açık kaynak kodlu wordpress,joomla gibi içerik yönetim sistemlerimi ? bir eticaret yazılımımı mı?

Bu seçimler ve ayarlamalar web sitenizin performansını direk etkiler.

 

DSO (mod_php)

DSO (dynamic shared object) aynı zamanda mod_php olarak bilinir. DSO eski fakat hızlı bir handler dır.
DSO handler da php apache sunucusunun bir modülü gibi çalışır. Bu php script inin apache yetkisiyle "nobody" user olarak çalışması anlamına gelir.
Bunun 2 sakıncası vardır, birincisi dosyaların sahibi "nobody" kullanıcısı olur, özellikle wordpress cms kullanırken wordpress arayüzü kullanılarak dosya yüklemesi yapılamaz.

ikinci sakınca ise güvenliktir. php tarafından yaratılan dosyaların sahibi nobody kullanıcısı olduğundan php script te bir açık varsa kötü niyetli kişiler bu açığı kullanılarak sisteminize ciddi hasarlar verebilir.
çünkü bu dosyaların hakları system dosyalarıyla aynı yetkiye sahiptir. Böylelikle eğer paylaşımlı barındırma yapılan bir sunucudaysanız (shared hosting) ki tüm hosting sunucuları paylaşımlıdır, başka bir web sitesindeki açık sizin web sitenizin güvenliğinide tehlikeye atabilir.
Bu da eğer web sitenizde önemli bilgiler tutuluyorsa bunların güvenliğini tehlikeye atar.
Ancak vps hosting (virtual private server - size özel sanal sunucu) iniz varsa sunucu güvenliğini sağlamak, sitenizdeki kodlar vb. konular sizin elinizdedir ve php handler olarak dso seçmek az bellek tüketimi ve performans sağlayacağı için iyi bir seçim olacaktır.

DSO kullanırken sunucu yazılımlarını, php versiyonunu ve diğer scriptleri güncel tutarak güvenliğinizi sağlamanız gerekir.

Avantajları:
1-Apache çalışırken bir kez yüklenir ve CGI ve suPHP den daha hızlıdır
2-Htaccess dosyasında php_flag lara izin verir
3-PHPoptcode cache ler ile uyumlu çalışır (xcache, apc)
4-sunucuda tek başına çalışan uygulamalar için idealdir.
Dezavantajları:
1-php prosesleri genellikle "nobody" kullanıcısı olarak işlem yapar, buda genellikle cpanel ve ftp kullanılarak yapılan işlemlerde dosya izin sorunları yaratır.

 

CGI 

CGI: Common Gateway Interface. CGI handler ında php CGI modulu olarak çalışır apache modülünden farklıdır. CGI da yine PHP "nobody" user olarak çalışır fakat suexec aktif edilmişse isteğin hangi user dan geldiği görülebilir.
Fakat Cpanel dökümanlarında bu metodun suexec olsada olmasa da hızlı olmadığını ve güvensiz olduğunu yazar.

Avantajları:
1-orta derecede trafiği olan ve paylaşımlı host edilen sunucular için idealdir.
2-dosyaları çalıştıran kullanıcılar farklıdır ve kötü amaçlı script çalıştıranlar tespit edilebilir
3-konfigurasyon daha kolaydir, httdpd.conf, sunucu php.ini ve kullanıcı için php.ini kullanılabilir
4-dosya izinleri ile kafanızı ağrıtmaz.
Dezavantajları
1-php siteler nispeten yavaş çalışır
2-htaccess php yönergeleri kullanılamaz
3-suphp ye göre daha az güvenlidir.
4-yüksek trafikte sunucu kapasitesini zorlar
5-zararlı kodlar, exploit ve trojanlara dikkat edilmesi gerekir çünkü php dosya sahibi olarak çalışır.

 

suPHP

Single User PHP yani tek kullanıcılı PHP, metodunda yine php CGI modülü olarak çalışır. CGI handler dan farklı olarak kullanıcı nobody değil kendisidir.
suphp cpanel in default (ön tanımlı) php handler ıdır. wordpress ya da joomla benzeri içerik yönetim sistemleri kullanılıyorsa uygundur. Çünkü tüm dosyalar doğru kullanıcı ayarları yetkileriyle yazılırlar.
böylece her dosya kendi kullanıcısı tarafından çalıştırılabilir, başka bir kullanıcı ya da root sizin dosyalarınızı çalıştıramayacağı için güvenlidir.
SuPHP nin kötü yanı fazla cpu tüketmesidir. Ayrıca SuPHP ile APC veya XCache gibi caching modülleri kullanamazsınız.

Avantajları:
1-paylaşımlı hosting sunucuları ve orta derecede trafiği olan web siteleri için idealdir.
2-DSO ya göre daha güvenlidir.
3-dosyaları çalıştıran kullanıcılar farklıdır ve kötü amaçlı script çalıştıranlar tespit edilebilir
4-konfigurasyon daha kolaydir, httdpd.conf, sunucu php.ini ve kullanıcı için php.ini kullanılabilir
5-dosya izinleri ile kafanızı ağrıtmaz.
Dezavantajları:
1-php seb siteleri nispeten yavaş çalışır.
2-htaccess php yönergeleri kullanılamaz
3-yüksek trafikte sunucu kapasitesini zorlar
4-zararlı kodlar, exploit ve trojanlara dikkat edilmesi gerekir çünkü php dosya sahibi olarak çalışır.

 

FastCGI

mod_fcgid ya da FCGI olarak geçer. CGI ın yüksek hızlı türevidir. FastCGI da php scripti kullanıcı cpanel kullanıcıyla aynıdır. CGI dan farklı olarak cpu kullanımı düşüktür ve DSO ya yakın derecede hızlıdır.
Aynı zamanda eaccelarator ve APC gibi caching modülleri ile kullanılabilir. Fastcgi in kötü yanı ise fazla bellek tüketmesidir.
Avantajları:
1-diğer php handler larından daha hızlıdır
2-yüksek trafikli web siteleri için idealdir.
3-az bellek tüketimi için ideal seçenektir.
Dezavantajları:
1-htaccess php yönergeleri kullanılamaz
2-herhangi bir sayfa çağrılmasada php işlemleri çalıştırır, yüksek trafikli siteler için idealdir ancak düşükt trafikli siteler için gereksiz kaynak kullanımı anlamına gelir.
3-zararlı kodlar, exploit ve trojanlara dikkat edilmesi gerekir çünkü php dosya sahibi olarak çalışır.

 

PHP Handler ların karşılaştırması
  DSO  CGI  SUPHP  FastCGI
Düşük cpu kullanımı  x     x
Düşük bellek tüketimi x x x  

PHP apache kullanıcısı yerine

site kullanıcısı olarak çalışır

  x x x
Güvenlik     x x
Hız  x     x


Tüm php Handler ların avantajları ve dezavantajları bulunur, çok seçenek olması sizin ihtiyacınıza göre birini seçmenize olanak tanır buda neden web teknolojilerinde ağırlıklı olarak php ve açık kaynak kodlu yazılımların kullanıldığını açıklamaktadır.
İhtiyacınıza göre doğru php handler ini seçebilirsiniz, sizin için hızmı kaynak tüketimi mi yoksa güvenlikmi ön planda?

One question I see come up often for users setting up their own web servers involves how they run PHP. Nearly everyone I know who runs their own server has questions about this that usually fall in one of two areas. First, they have installed WordPressDrupal, or another CMS and can’t get uploads to work within the software or, second, they are interested in making their web server more secure. The answer to both of these involves how your web server handles PHP which is known as the PHP handler.

The choices in how you run PHP may seem complicated, but they don’t have to be. Quite simply your needs will determine which you use. Here’s some information on your options and where they can best be used.

What are PHP handlers?

Remember that on their own web servers are designed to send static resources including HTML, images, etc to users. They are not designed to interpret any code themselves. PHP handlers are the programs that interpret the PHP code in your web application and process it to be sent as HTML (or another static format) by your web server. Out of the box none of the major web servers can handle PHP by themselves so they need another program to do it for them. This program, known as a PHP handler takes all of your PHP code and generates the output which is then sent to the web server which forwards it on to the user.

Currently there are 4 major PHP handlers available on Apache. These include mod_php (AKA DSO), CGI, FastCGI, and suPHP. If you’re using another web server your options may be different (for example, nginxrequires FastCGI). Each of these handle memory, CPU, and file permissions in a different way which can then manifest itself in your web app in everything from performance to important features of your application. Here’s a breakdown of each of the options

mod_php (DSO)

DSO (which is short for Dynamic Shared Object) or mod_php is the oldest and, some would say, the fastest PHP handler available. It essentially makes PHP a part of Apache by having the Apache server interpret the PHP code itself through use of an Apache module known as mod_php. This is the default handler typically installed when installing a web server package on your server.

On the plus side mod_php is fast, in fact very fast as it runs directly in the same process as your Apache server. Running it together with Apache also means that it has a very low CPU and memory requirement which may be beneficial in situations where computing resources are limited.

The major drawback of mod_php is that it runs as part of Apache which means that it runs as the same user that your Apache process runs as (if you’re on Ubuntu this would www-data). This means that all work on files will be done as the Apache user which therefore must have permissions to all of your files. In most cases when you upload files to your server you do so as a different user that has login rights to the machine. This means that all the files and folders you upload are “owned” by the user that you used to upload them. If you don’t give permissions to them to the Apache user the web server will not be able to read or write to the files, but if you do give access to them to the Apache user and your machine is compromised by an attacker that attacker could have access to much more than just the files in the website they used to get in to your system potentially creating problems for every site hosted on your machine.

The file permission issue is also the biggest source of headache for users of content management systems such as WordPress or Drupal. Because the files of your site are often owned by an account other than that which they are running as, users of mod_php are often unable to upload or modify files from within their CMS without substantial work arounds. Not only could this prevent an administrator from adding pictures and other media to their site easily, but it could also lead to security patches not being installed due to the added complexity of doing so which causes another security hole in your site.

CGI

CGI is the fallback in most servers when mod_php is not available. Instead of running the PHP code within Apache it is now run as it’s own CGI process, that is, in a program outside of your Apache server.

By default CGI will be called by the Apache server meaning that it will run as the Apache user with all the problems of doing so that mod_php encountered. Unlike mod_php however CGI has the ability to see the PHP as another user (presumably the user that owns the files) using another Apache module known as suexec.

For performance CGI is not nearly as fast as mod_php and requires more CPU time. It is however still soft on memory usage which may be a benefit to some users.

suPHP

suPHP runs PHP outside of the Apache script as CGI. Unlike CGI however it will run the scripts as a user other than the Apache user (presumably the user that owns the files). This means that if you are using a CMS you will be able to upload files from within your web application using suPHP. In addition, because your PHP is being run as a different user any vulnerability in your site can be restricted to only the files of your website thereby providing substantial security benefits particularly on servers that run multiple websites.

The cost of the upload ability and security of suPHP is not cheap. suPHP is slow and requires quite a bit of CPU to process all the files. In addition, as it must process the file each and every time it is called, suPHP cannot use any OPCode caching such as APC or memcached resulting in even higher CPU usage by your application. If you are running on a low-end VPS or other server with an application such as WordPress this configuration can easily push you passed any CPU limits you might have whenever traffic starts to climb.

FastCGI

FastCGI is the last major PHP handler. It offers the security benefits of suPHP by executing files as the owner of the file. Unlike suPHP however it keeps open a session for the file when the processing is done resulting in significant memory use but also allowing for the use of OPCode caching such as APC or memcached. If you do have the memory for it however FastCGI is arguably the fastest handler even in comparison with mod_php (See Running Apache+FastCGI+suexec in Ubuntu without /var/www for more help in getting started with FastCGI).

So which is best?

If you have the memory for it there really isn’t any reason not to run FastCGI in this day and age. In cases where memory is restricted however the choice may come down to security vs performance. Here’s a quick breakdown to help you decide.

  mod_php CGI suPHP FastCGI
Memory usage Low Low Low High
CPU Usage Low High High Low
Security Low Low High High
Run as file owner No No Yes Yes
Overall Performance Fast Slow Slow Fast

Of course another consideration might be ease of installation however with the multitude of tutorials available on the web help should be no further away than a quick Google search on the topic.

 

Bir Başka  İngilizce Makale

Kaynaklar

Yorumunuzu Ekleyin





  • Kurallı İfadeler (regex Engine)
  • Kurallı İfadeler (regex Engine) ~ 29,168

    Bir regex'in gerçekte nasıl çalıştığını bilmek daha efektif çalışan regex ifadeleri oluşturmamızı ve regex'leri daha isabetli oluşturmamızı sağlar. Bu yazımızda oluşturduğunuz regex ifadelerinin neden beklediğiniz sonuçları vermediğini ve umduğunuz eşleşm...




  • PHP ile PDF dosya oluşturmak
  • PHP ile PDF dosya oluşturmak ~ 22,890

    Php ile yeni bir pdf dosyası oluşturmak : Öncelikle php ile pdf işlemleri yapmak için bir pdf kütüphanesine ihtiyacınız olacak


  • PHP nedir?
  • PHP nedir? ~ 21,398

    HTML kodlarının arasına yerleştirilmiş php kodlarından ayrıştırıp işleyerek sonuçta saf HTML formatında bir çıktı üretmek ve Web sunucusuna iletmektir.


  • $_FILES
  • $_FILES ~ 20,324

    Örnek kod ve açıklamalar



  • Oop - Nesne Yönelimli Programlama
  • Oop - Nesne Yönelimli Programlama ~ 17,817

    Artık ister istemez her programcının bulaştığı bu teknik hakkında sayısız makale yazılmıştır bu güne kadar. Bu makale de onlardan biri


  • Xampp Kurulumu ~ 16,873

    Xampp apache, mysql, php ve phpmyadmin için kolay ve basit kurulum sağlayan bir uygulamadır.




  • Php İle Excel Dosyası Oluşturmak
  • Php İle Excel Dosyası Oluşturmak ~ 16,194

    Genelde, herhangi bir biçimlendirme söz konusu olmadığında, veritabanındaki bir bilgiyi ya da başka bir tabloyu excel ortamına aktarmak için csv yöntemini kullanırım. Bu yöntem herkesin bildiği gibi, her sütunu tab ya da noktalı virgül gibi bir karakterle...


  • Verileri doğrulamak için PHP ile filtreleme işlemleri
  • Verileri doğrulamak için PHP ile filtreleme işlemleri ~ 15,865

    Ziyaretçilerden gelen verilerin istediğimiz formata uygunluğunu kontrol etmeliyiz ki, güvenlik açığı yaratmayalım. E-postaları, web adreslerini, bilgi girişlerini ve dahasını Her birine uygun farklı fonksiyonlar yazıldı bu vakte kadar. Ancak PHP 5.2.0 ve ...


  • En iyi 25 php template motoru
  • En iyi 25 php template motoru ~ 15,361

    Php tabanlı web siteleri dizayn ederken, php kodlarını html kodlar arasına gömeriz. Fakat gün gelir bu kodları düzenlemek istediğimizde çok büyük bir çaba gerektirir. Bu tarz durumlarla başa çıkabilmek için ve daha kararlı bir sistem kodlamak için t...



  • Php Mysql to XML
  • Php Mysql to XML ~ 15,084

    Bu yapıyı geliştirerek mysql veritabanınızdaki datalarınızı xml standartlarına dönüştürebilirsiniz.



  • Dizi Tanımlamaları
  • Dizi Tanımlamaları ~ 14,769

    PHP’de array tanımlayıcısını kullanarak içerisinde elemanları yerleştirmek yoluyla ya da index numarasını köşeli parantezler içerisinde belirterek atama yaparak dizi oluşturmak mümkündür


  • $_SERVER
  • $_SERVER ~ 14,220

    $_SERVER host bilgileri, header bilgileri, yollar ve script yolları gibi bilgileri içeren bir dizidir. Bu dizideki değerler web server tarafından üretilir. Tüm server yazılımlarının, tüm değerleri atayacağına dair bir kesinlik yoktur. Yazılım bazıl...


  • Php ile Oturum Yönetimi (SESSION)
  • Php ile Oturum Yönetimi (SESSION) ~ 14,216

    Türkçesi oturum anlamına gelen session bilgilerin saklanması için kullanılan mantıksal bir nesnedir.Session oturum yönetimini kullanarak şifreli sayfalar oluşturarak ve bu sayfaları belirlediğiniz kullanıcıların görmesini sağlayabilirsiniz.