Dziś jest wtorek, 7 października 2008 roku (z kalendarza...)

Lighttpd i PHP

Icon

12.02.2008, 09:43

PHP

Komentarze (4)

Powrót

Z powodu porządków na stanowiskach pracy postanowiłem dla próby zainstalować sobie Lighttpd zamiast Apache'a. Z serwerem tym miałem już wcześniej do czynienia podczas stawiania serwera, lecz z powodu braku niektórych możliwości musiałem wtedy z niego zrezygnować. Natomiast na domowy komputer - czemu nie, tym bardziej że pamiętałem łatwość, z jaką uruchamia się na nim FastCGI.

Pierwszą cechą rozpoznawczą jest konfiguracja Lighttpd. Składnia wyraźnie odróżnia się od tego, co znamy z Apache'a i jest według mnie bardziej czytelna. Dyrektywy grupowane są w postaci przestrzeni nazw, np. server.xxx, można także tworzyć tablice, korzystając z podobnej składni do tej, którą znamy z PHP. W parze z tym idzie logiczniejsze ułożenie dyrektyw. Widać to szczególnie na przykładzie wspomnianego wyżej FastCGI. W Apache'u jest to strasznie zakręcone i za bardzo nie wiadomo, co do czego idzie, ani nawet co jest potrzebne. Lighttpd ma bardziej eleganckie podejście - odpowiednia tablica i warunki na zdefiniowanie, w jakiej subdomenie ma być aktywna dana instancja:

$HTTP["host"] =~ "(^|[a-zA-Z0-9\-\_\.])localhost$" {
    fastcgi.server = (
	".php" => ( "localhost" => 
	    ( 
		"socket" => "/tmp/php-fastcgi1.socket"
	    )
	)
    )
 
}
 
$HTTP["host"] =~ "(^|[a-zA-Z0-9\-\-\.]+)lh$" {
    fastcgi.server = (
	".php" => ( "localhost" =>
	    (
		"socket" => "/tmp/php-fastcgi2.socket"
	    )
	)
    )
}

Jedyny poważniejszy problem, jaki napotkałem, dotyczył obsługi subdomen, a właściwie jej braku. Z nieznanych mi dotąd powodów, Lighttpd zupełnie ignorował moduł module_simple_vhost oraz jego całą konfigurację - dokładne logi pokazywały, że pomimo jego załadowania nie jest on w ogóle uruchamiany w trakcie przetwarzania żądania i wszystko szło zawsze z głównego document-root. Nawet samodzielna kompilacja nie rozwiązała tego, jednak na szczęście znalazłem obejście dzięki dyrektywom warunkowym. Lighttpd posiada zestaw zmiennych reprezentujących elementy żądania, które możemy warunkowo sprawdzać (porównanie, dopasowanie do wyrażeń regularnych), a także dowolnie zagnieżdżać. Umożliwia to wykonanie subdomen w zasadzie bez konieczności ładowania jakiegokolwiek modułu:

$HTTP["host"] == "test.sites.lh" { 
    server.document-root = "/home/lighttpd/vhosts/Sites/test/www"
}

W ostatecznym rozrachunku Lighttpd chyba zostanie na moim dysku. Pomimo problemów z subdomenami, wreszcie mam możliwość uruchamiania moich skryptów na własnych prawach, a w ostatecznym rozrachunku ta rzecz jest istotniejsza.

Edit: poprawka, ta "praca na prawach właściciela" nie działała do końca tak, jak powinna. Po pierwsze, był błąd w konfiguracji FastCGI i poprawiłem go już w tym poście. Po drugie, mając uruchomione dwie instancje FastCGI (jedną na prawach użytkownika, drugą - serwera), musiałem sklonować wszystkie binarki, skrypty startowe oraz dodatkowo je przerobić, by ustawiały odpowiednie prawa dostępu do socketów. Tak więc trochę zabawy z tym jednak było :).

Powrót

Przypisy:

Komentarze

Napisał nrm w wtorek, 12 lutego 2008 o 12:06

lighttpd uzywam od ponad roku i jestem w miare zadowolony ale chyba na nastepnym serwerze zainstaluje nginxa ;D

Napisał Nowaker w wtorek, 12 lutego 2008 o 13:21

Gdy zakupiłem serwer rack i dałem go do kolokacji do serwerowni, od razu postawiłem lighta z PHP 5 na FastCGI. Działa juz 5 miesięcy i problemów brak :) Co do vhostów to ja tak konfiguruję lighta:

$HTTP"host" =~ "^(www\.|)nowaker\.net$" {
simple-vhost.server-root = "/home/www/nowaker.net/html"
accesslog.filename = "/home/www/nowaker.net/logs/access.log"
}

Może się przyda.

Napisał Bob w wtorek, 12 lutego 2008 o 13:35

Osobiście używam na serwerze (i w domu) od kilku miesięcy i gdybym miał teraz wrócić do Apache'a chyba by mnie skręciło. Jeden rzut oka w konfigurację i od razu wiadomo o co chodzi, świetnie się konfiguruje, do tego ciekawe moduły jak secdownload a rewrite to bajka. W ogóle szkoda że alternatywy są tak mało popularne. Przykładowo lighttpd (cgi) + bogofilter + mysql (tylko myisam) + tinydns + qmail i mamy w pełni działający serwer potrzebujący 33MB.

Napisał Zyx w sobotę, 23 sierpnia 2008 o 17:58

Dodam, że z pomocą FastCGI oraz lokalnych subdomen bardzo prosto i łatwo można zainstalować sobie na komputerze np. 3 wersje PHP. Zainstalowałem PHP 5.2.6 z pakietów, skompilowałem do pierwszego katalogu PHP 5.3.0-alpha, do drugiego PHP 6.0-dev. Każdemu z nich przypisałem osobny demon spawn-php, a każdy z tych demonów podpiąłem osobnym socketem pod Lighttpd. Następnie porobiłem sobie domeny w stylu opl.libs.lh dla wersji stabilnej, opl.php53.lh dla PHP 5.3 i opl.php60.lh dla ostatniej. Wszystkie wskazują na ten sam katalog, ale korzystają z innego socketu i w ten sposób zależnie od użytej domeny, korzystamy z innej wersji PHP.

Strona 1 z 1 :: 1

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2008 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia