Det finns flera olika varianter av webservrar för Raspberry PI, de som finns i distributionen är bland annat  Apache, lighthttpd och nginx. Av dessa tre verkar nginx var den mest resurssnåla och tål mer last (se denna artikel). Detta är speciellt viktigt på datorer med små resurser (minnen, cpu) som Raspberry PI. Om man har kraftfulla maskiner så påverkas man inte så mycket, t.ex har jag en webserver på jobbet med apache som har c:a 4 miljoner req / dag och maskinen ligger på <10 % last, med då pratar vi om maskiner med dubbla xeon processorer och en prislapp oftast över 100000 kr.

En webserver bygger på att servern letar upp en fil i ett filsystem och presenterar den för klienten (webläsaren), detta innebär att all information skulle vara statisk (om inte något annat program ändrar på innehållet i filerna).

Därför utvecklades ett system som kallades CGI (Common Gateway Interface) som beskriver hur ett program kan få information från webserver (url, hostname, postdata m.m) , behandla data och skicka tillbaka information till webserver som den i sin tur vidarebefordrade till klienten. Nackdelen med detta är att programmet måste startas varje gång som den ska skapa en sida, detta ger en massa tid som spenderas med att starta upp och avsluta program. Man tog då fram ett nytt system som kallas FastCGI, enklast beskrivs det som en process som aktiv hela tiden och webservern och CGI-programmet kommunicerar via socket eller nätverk. Man spara då in det tid som spenderas i upp och nedstängning.

Vissa webservrar har utvecklad olika typer av API för att bygga laddningsbara moduler för att enklare integrera olika 3:e-parts program, nginx har inget modulstöd men stöd för FastCGI.

nginx installation

nginx är som jag nämt tidigare en webserver som skalar ganska bra på små system, det finns med i distributionen så den är väldigt enkel att installera. Installationen sker med

sudo apt-get install nginx

nginx-install

För att de som är van att köra apache2 och för att det ska vara lättare att hitta till hemkatalogen (som nu är /usr/share/nginx/www) för webserverna så kan man köra

sudo ln -s /usr/share/nginx/www /var/

för att skapa en /var/www där alla webserverfiler finns.

Servern är konfigurerade att starta automatisk vid uppstart men du kan starta den direkt utan att starta om med

sudo /etc/init.d/nginx start

och sedan surfa in på http://raspberrypi.local (fungerar om du följt artikeln Använda namn istället för IP-nummer vid inloggning)

nginx-web,

Klar, svårare var det inte.

För de läsare som är van vid apache2, nginx har en liknande filstruktur för konfigurationen som ligger under /etc/nginx med bl a sites-available och sites-enabled.

Om man ska används sig av dynamiskt innehåll behövs ett tillägg för att via CGI generera webinnehållet, en av de mest använda är PHP som är ett programmeringsspråk som påminner om Perl men är enklare att programmera i, Den har stöd för bl.a klasser och för en massa externa program t.ex MySQL och utvecklas fortfarande. Detta är nog det programmeringsspråk som de flesta hobbyprojekt använder sig av, med det används även av riktigt store projekt som t.ex wordpress som finns på över 64 miljoner websites.

php5 intstallation

Den aktuella versionen av php är 5 och denna finns med i distributionen, vi börja med att hämta php och en FastCGI implementation  av php5 med kommandot

sudo apt-get install php5 php5-fpm php5-cli

Nu kan man starta FastCGI skriptet för php5 med

sudo /etc/init.d/php5-fpm start

Nu behöver man ändra i nginx konfigurationfil för att den ska veta om vart den ska skicka php kod, ändra på /etc/nginx/sites-enabled/default med en editor t.ex nano

sudo nano /etc/nginx/sites-enabled/default

leta upp följande rader

och ta bort brädgårdsteckninen (#) från alla rader utom 1,2,6,7 så att det ser ut så här

spara filen och starta om webserver med

sudo  /etc/init.d/nginx restart

Nu lägger man in en fil med php för att kontrollera att allt fungerar, redigera en ny fil med

sudo nano /var/www/php-test.php

och skriv in

nu an man testa om det fungerar genom att surfa in på http://raspberrypi.local/php-test.php så ska man få en lång informationssida för php

nginx-php5

Nu är det färdigt, en webserver med php5 installerat