Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

cz. 1 | Lighttpd - stawiamy lekki serwer WWW

Witam. Zapewne wszyscy wiecie jak bardzo zasobożerny jest Apache w połączeniu z MySQL, gdy jednak chcemy postawić stronę internetową na troszkę słabszym sprzęcie z pomocą przychodzi jednak Lighttpd który funkcjonalnością praktycznie dorównuje Apache.

Ostatnio zakupiłem tani terminal z procesorem VIA Nehemiah @ 1 GHZ, pamięcią RAM 128 mb DDR I, USB 2.0 i postawiłem na nim właśnie lighttpd.

Sam system Debian GNU/Linux na takim urządzeniu używa ok. 10 mb pamięci RAM, lighttpd jakieś 2-5 mb, serwer OpenSSH ok. 1-2 mb i wychodzi nie więcej niż 20 mb.
Ciekawe prawda? Apache zjadłby tutaj ponad 200 mb - tak strzelając na oko.

Tak więc przedstawiłem Wam główne powody dla których zachęcam do używania Lighttpd jako serwera WWW, a teraz przejdę do opisu jak postawić ten malutki serwerek WWW na naszej maszynie.

1. Instalacja pakietów w systemie

Zapewne w repozytorium Waszej ulubionej dystrybucji znajdziecie pakiet o nazwie lighttpd lub podobnej, ja mogę pokazać jakie są pakiety dostępne pod Debianem i Gentoo:

* www-servers/lighttpd Latest version available: 1.4.28 Latest version installed: 1.4.28 Size of files: 626 kB Homepage: http://www.lighttpd.net/ Description: Lightweight high-performance web server License: BSD

webnull-oneill% apt-cache search lighttpd lighttpd-doc - Documentation for lighttpd lighttpd-mod-cml - Cache meta language module for lighttpd lighttpd-mod-magnet - Control the request handling module for lighttpd lighttpd-mod-mysql-vhost - MySQL-based virtual host configuration for lighttpd lighttpd-mod-trigger-b4-dl - Anti-deep-linking module for lighttpd lighttpd-mod-webdav - WebDAV module for lighttpd lighttpd - A fast webserver with minimal memory footprint

Tak więc dla Debiana, Ubuntu, Mepis, Linux Mint:apt-get install lighttpd

Warto dodać, że w Debianowych dystrybucjach lighttpd sam doda się do listy demonów które startują z systemem - aby to wyłączyć polecam narzędzie rcconf dostępne w repozytorium.

Gentoo:
Przed instalacją warto wybrać flagi kompilacyjne a następnie dodać je do /etc/portage/package.use

emerge lighttpd

Polecam takie flagi:bzip2 fam gdbm ipv6 ldap pcre php ssl mysql -doc -libev -lua -memcache -minimal -rrdtool -test -webdav -xattr

Start demona razem z systemem:rc-update add lighttpd default

Arch Linux:pacman -S lighttpd

Start demona razem z systemem:
W /etc/rc.conf do zmiennej DAEMONS dodać "lighttpd".

Fedora, Red Hat, CentOS:yum install lighttpd

Start demona razem z systemem:
? - użytkownicy jednego z tych systemów muszą poszukać sobie, nie za bardzo używałem którego z tych systemów dlatego bzdur pisać nie będę.

2. Edycja plików konfiguracyjnych

Lighttpd posiada jeden prosty plik konfiguracyjny który może przyłączać inne pliki konfiguracyjne - ten główny znajduje się w /etc/lighttpd/lighttpd.conf

Lista modułów lighttpd: server.modules = ( # "mod_rewrite", # Przyjazne adresy URL znane z Apache # "mod_redirect", # "mod_alias", "mod_fastcgi", # potrzebny do używania PHP czy Perla "mod_access", # Kontrola dostępu do katalogów # "mod_cml", # "mod_trigger_b4_dl", # "mod_auth", # "mod_status", # "mod_setenv", # "mod_proxy", # "mod_simple_vhost", # "mod_evhost", # "mod_userdir", # "mod_compress", # "mod_ssi", # "mod_usertrack", # "mod_expire", # "mod_secdownload", # "mod_rrdtool", # "mod_webdav", "mod_accesslog" # Loguje wszystkie próby dostępu do serwera ) # }}}

Aby wyłączyć dany moduł należy go zakomentować czyli postawić znak "#" na początku linii z modułem.

Omówię kilka istotnych bądź ciekawych zmiennych konfiguracyjnych:

server.document-root = var.basedir + "/htdocs" # gdzie znajdują się pliki publicznie udostępniane server.follow-symlink = "enable" # czy serwer ma podążać za dowiązaniami symbolicznymi? server.port = 80 # port nasłuchiwania serwera, jeżeli mamy zamiar postawić kilka serwerów na jednym adresie IP to należy każdy postawić na innym porcie aby wszystkie były widoczne z zewnątrz static-file.exclude-extensions = (".php", ".pl", ".cgi", ".fcgi") # rozszerzenia plików które nie powinny być wysyłane jako zwykłe pliki np. tekstowe dir-listing.activate = "enable" # listowanie zawartości katalogów w przeglądarce dir-listing.hide-dotfiles = "enable" # ukrywa ukryte pliki ;-)

3. Blokujemy dostęp nie proszonym gościom

Aby zabezpieczyć katalog lub plik przed otwarciem przez niepowołane osoby należy dodać do /etc/lighttpd/lighttpd.conf kilka linii w których należy wskazać katalog oraz dozwolony lub niedozwolony adres IP.

$HTTP["remoteip"] !~ "192.168.1." { # "!" - zaprzeczenie, jeżeli adres IP nie jest podobny do tego $HTTP["url"] =~ "^/oneill/" { # to dla katalogu /oneill/ na serwerze url.access-deny = ( "" ) # dostęp zostanie zablokowany } }

W następnej części postaram się opisać jak zainstalować PHP, MySQL czy SQLite a także jak tworzyć adresy przyjazne adresy URL. 

Komentarze

0 nowych
maciekszpak   3 #1 02.02.2011 22:29

Bardzo ciekawie wygląda ten Lighttpd, szkoda tylko, że napisałeś taki skromny opis działania, ale mimo wszystko czekam na kolejne wpisy o tym programie!

beny_pl   3 #2 02.02.2011 23:34

nie jestem mocny w tych sprawach ale z chęcią bym się pobawił nim :) tylko mam problem, bo wszystkie projekty z pracy stoją na vhostach i .htaccessach z RewriteEngine, jest możliwość uruchomienia tego przy pomocy lighttpd?

  #3 03.02.2011 00:32

Jakoś do lighttpd nigdy się nie mogłem przekonać... Do projektów raczej używam nginx (na produkcji) i cherokee (lokalnie).

Niemniej jednak miło że poruszasz temat alternatyw dla apacza :)

XeonBloomfield   5 #4 03.02.2011 09:06

@beny_pl:

Masz o tym napisane we wpisie:
"server.modules = (
# "mod_rewrite", # Przyjazne adresy URL znane z Apache
[...]
# "mod_simple_vhost",
[...]
)
# }}}"

Wystarczy tylko usunąć komentarze - "#" przed wpisami.

  #5 03.02.2011 10:31

@beny_pl, XeonBloomfield

Nie tak do końca, mod_rewrite w lighttpd jest, ale nie obsługuje plików .htaccess znannych z Apache.
Czyli trzeba ręcznie przepisać regułki, lub znaleźć/zrobić sobie automat.

W nginx sytuacja wygląda podobnie.

Morał jest taki, że oczywiście wszystko da się uruchomić, ale nie każdemu się będzie to opłacało. (tzn. przepisywać regułki htaccess tylko po to, żeby sprawdzić, że działają ;-), środowisko produkcyjne to inna bajka)

webnull   9 #6 03.02.2011 16:08

@tomek_tomek
Ale ile tych regułek może być do przepisania dla pojedynczego serwisu WWW? Maks. do 100 - uwiniesz się w 1-2h, a serwer będzie stać latami bez ciężaru jakim jest Apache...

  #7 03.02.2011 16:33

To nie była krytyka, tylko stwierdzenie faktu.

Sam hostuję swój mały serwis na nginx i jestem zadowolony. Pewnie równie zadowolony bym był z lighttpd.
Akurat u mnie tych rewrite'ów jest raptem kilka, ale nawet gdyby było ich więcej to bym je przepisał.

Inna sprawa, że u mnie głównym ciężarem dla serwera jest baza danych.

mati75   6 #8 03.02.2011 17:26

Z lekkich to wolę nginx, zrobię konkurencje i spróbuje jutro opisać.
Taki load to nic nadzwyczajnego, ja mam: 17:26:01 up 3 days, 1:27, 1 user, load average: 0.09, 0.15, 0.10

z chodzącymi dwiema bazami.

  #9 03.02.2011 17:48

@mati75, ja również, zawsze stawiam na nginx-ie serwery, w połączeniu z SQLite to naprawdę lekki serwer. No i SQLite ma tą zaletę że cała baza jest w pliku ;)

webnull   9 #10 03.02.2011 18:17

@mati75
A masz procek z taktowaniem 1 GHZ? Zapewne trochę większe taktowanie masz, bo kto taki staroć na serwer daje ;-)

webnull   9 #11 03.02.2011 18:18

@tomek_tomek
Ja opieram wszystkie aplikacje o autorskiego frameworka, a że napisałem dla niego sterownik SQLite to przeniosłem wszystko w jeden dzień z MySQL na SQLite.

webnull   9 #12 03.02.2011 18:20

@mati75
Serwer:
webnull-oneill% uptime
18:30:34 up 3 days, 1:06, 2 users, load average: 0.00, 0.00, 0.00

Desktop:

webnull@webnull-gentoo-desktop ~ $ uptime
18:19:49 up 2:24, 4 users, load average: 0.00, 0.01, 0.05

;-)

  #13 03.02.2011 18:42

SQLite jest fajny, ale ta moja baza ma jakieś 400MB

webnull   9 #14 03.02.2011 19:47

@tomek_tomek
W SQLite miała by więcej? :>

Przecież można by skonwertować bazę.

Jak napiszę w pełni obsługę MySQL i SQLite do mojego frameworka to napewno napiszę aplikację do konwertowania bazy danych bo będzie to sprawa banalna.

tomasz154   2 #15 03.02.2011 20:35

Hmmm :)
1. Jak coś działa i działa dobrze, to się tego nie zmienia

2. Nie robiłem testów jak sprawuje się SQLite przy kilku milionach rekordów, ale nie sądzę by ta zmiana wyszła na dobre mi i wydajności mojego wynalazku ;-), chyba najlepiej SQLite sprawuje się przy mniejszych bazach. Nie, żebym uważał, że 400MB bazę za olbrzymią ;-) Sporą jej część stanowią indeksy.

3. Nie wiem jak wygląda sytuacja wyszukiwania pełnotekstowego w SQLite - niby coś tam jest, ale nie próbowałem używać. Natomiast używam wyszukiwania pełnotekstowego w mySQL, z czym też są problemy, bo InnoDB go nie obsługuje, a MyISAM nie obsługuje kluczy obcych - chcąc używać jednego i drugiego w praktyce muszę trzymać pewne dane w dwóch miejscach na raz, ale to akurat mogę przeboleć. Myślałem o użyciu Sphinxa, albo przejściu na PostgreSQL, ale nie chce mi się tego ruszać.
Ogólnie żałuję, że od początku nie użyłem Postgresa.

Przerobienie samej aplikacji w moim przypadku to nie problem, napisana jest z użyciem frameworka, więc przeróbka sprowadziłaby się do zmiany sterownika na inny i ewentualnych minimalnych modyfikacjach zapytań SQL. Zwyczajnie nie chce mi się konwertować tej bazy.

tomasz154   2 #16 03.02.2011 20:35

ja = tomek_tomek

webnull   9 #17 03.02.2011 21:06

@tomasz154
Cóż faktycznie u Ciebie jest sprawa nieco skomplikowana jednak ja buduję na razie mniej skomplikowane portale, fora i innego typu strony internetowe :-)

kwpolska   6 #18 03.02.2011 21:51

Ja wolę nginx. Bardziej me-friendly.

mati75   6 #19 04.02.2011 22:33

@webnull
Core i7 720 przeskalowany do 1,33 MHz.

mati75   6 #20 04.02.2011 22:33

GHz oczywiście.

webnull   9 #21 04.02.2011 23:44

@mati75
No cóż, posiadasz 10 krotnie lepszy sprzęt od Mojego.
Ale i tak masz wyższy load averange ;-)

pjetrek573   2 #22 05.02.2011 12:14

Witam
Zainstalowałem Linux Mint bazujący na Debianie (nie Ubuntu). Instalacja lighttpd przebiegła pomyślnie, i działał, tyle, że nie uruchamia się wraz z systemem. Jak to zmienić?

webnull   9 #23 05.02.2011 12:49

@pjetrek573
apt-get install rcconf

I uruchom rcconf, zaznacz w nim lighttpd spacją i zapisz enterem.

webnull   9 #24 05.02.2011 12:50

Oczywiście przed apt-get należy postawić sudo aby uruchomić polecenie z uprawnieniami administratora.

pjetrek573   2 #25 05.02.2011 13:45

Dzięki, teraz już działa ;)

pjetrek573   2 #26 05.02.2011 14:03

A tak jeszcze z innej beczki trochę, jak trzeba skonfigurować lighttpd, żeby był możliwy odczyt np. plików mp3 znajdujących się na serwerze? Obecnie wyskakuje mi tylko błąd "403 - Forbidden"

pjetrek573   2 #27 05.02.2011 16:59

Mój błąd, plik nie miał odpowiednich uprawnień.

webnull   9 #28 11.02.2011 17:38

@pjetrek573
Zapewne operujesz z poziomu użytkownika z poza uprawnień serwera WWW bądź po prostu rootem.

Musisz wtedy zmienić uprawnienia plików tak aby serwer WWW mógł je odczytać.

chown www-data plik
chmod 755 plik

To instrukcja dla mających podobny problem ;-)

  #29 06.03.2012 08:24

Pozdrawiam zegarek na zrzucie ekranu ;-).