Unix sistemlerde Lighttpd 1.4

Bu bölüm PHP'nin Unix sistemlerde Lighttpd 1.4 ile kurulumu hakkında bilgiler ve ipuçları içerir.

Lütfen devam etmeden önce » Lighttpd redmine sitesini ziyaret edip Lighttpd'nin doğru düzgün nasıl kurulacağını öğreniniz.

PHP ve Lighttpd'ye bağlanmak için tercih edilen SAPI Fastcgi'dir. Fastcgi, PHP 5.3'te php-cgi'yi özdevinimli olarak sihirli bir şekilde etkin kılar. Fakat, eski sürümler için PHP'nin --enable-fastcgi ile derlenmesi gerekir. PHP'nin fastcgi için hazır olduğunu doğrulamak için php -v çıktısının PHP 5.2.5 (cgi-fcgi) içermesi gerekir. PHP 5.2.3 öncesinde, fastcgi, php çalıştırılabiliri üzerinde etkindi (php-cgi diye birşey yoktu).

Letting Lighttpd'ye PHP süreçlerini çatallattırmak

Lighttpd'nin PHP'ye bağlanmasını ve fastcgi süreçlerini çatallamasını sağlamak üzere yapılandırmak için lighttpd.conf dosyasını düzenlemeniz gerekir. Fastcgi süreçlerine yerel sistemden bağlanmak için soketler tercih edilir.

Örnek 1 - lighttpd.conf'tan bir bölüm

server.modules += ( "mod_fastcgi" )

fastcgi.server = ( ".php" =>
  ((
    "socket" => "/tmp/php.socket",
    "bin-path" => "/usr/local/bin/php-cgi",
    "bin-environment" => (
      "PHP_FCGI_CHILDREN" => "16",
      "PHP_FCGI_MAX_REQUESTS" => "10000"
    ),
    "min-procs" => 1,
    "max-procs" => 1,
    "idle-timeout" => 20
  ))
)

bin-path yönergesi lighttpd'nin fastcgi süreçlerini devingen olarak çatallamasına izin verir. PHP kendi çocuklarını PHP_FCGI_CHILDREN ortam değişkenine göre çatallayacaktır. PHP, PHP_FCGI_MAX_REQUESTS değerinin aşılmasına sebep olan çocuk süreci öldürür. PHP'de min-procs ve max-procs yönergelerinden genel olarak kaçınılması gerekir. PHP kendi çocuklarını yönetir ve makine kodu önbelleklerini APC gibi çocukları arasında paylaştırır. min-procs yönergesine 1'den büyük bir değer atanmışsa PHP yanıtçılarının sayısı PHP_FCGI_CHILDREN değerinin katları olacaktır (2 min-procs * 16 çocuk eşittir 32 yanıtçı).

Spawn-fcgi ile çatallama

Lighttpd, fastcgi süreçlerinin çatallanmasını kolaylaştırmak için spawn-fcgi adında bir programla gelir.

php-cgi'nin çatallanması

Süreçleri spawn-fcgi kullanmaksızın çatallamak mümkünse de, biraz ağır kaldırma çalışmak gerekir. Gelen istekleri karşılamak için PHP'nin kaç çocuk çatallayacağı PHP_FCGI_CHILDREN ortam değişkeni ile belirlenir. PHP'nin her çocuğunun kaç isteklik yaşayacağını ise PHP_FCGI_MAX_REQUESTS belirler. Aşağıda, PHP yanıtçılarının çatallanmasına yardımcı olan basit bir bash betiği verilmiştir.

Örnek 2 - FastCGI Yanıtçılarının Çatallanması

#!/bin/sh

# php-cgi çalıştırılabilirinin yeri
PHP=/usr/local/bin/php-cgi

# PID dosyasının yeri
PHP_PID=/tmp/php.pid

# Dinlenecek adres
#FCGI_BIND_ADDRESS=10.0.1.1:10000
# Dinlenecek soket
FCGI_BIND_ADDRESS=/tmp/php.sock

PHP_FCGI_CHILDREN=16
PHP_FCGI_MAX_REQUESTS=10000

env -i PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN \
       PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS \
       $PHP -b $FCGI_BIND_ADDRESS &

echo $! > "$PHP_PID"

Uzak FCGI (nesnel) örneklerine bağlanmak

Uygulamaları dengelemek için Fastcgi örnekleri çok sayıda uzak makineye çatallanabilir.

Örnek 3 - Uzak FCGI örneklerine bağlanmak

fastcgi.server = ( ".php" =>
   (( "host" => "10.0.0.2", "port" => 1030 ),
    ( "host" => "10.0.0.3", "port" => 1030 ))
)