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
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)
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
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # fastcgi_split_path_info ^(.+\.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: # fastcgi_pass unix:/var/run/php5-fpm.sock; # fastcgi_index index.php; # include fastcgi_params; #} |
och ta bort brädgårdsteckninen (#) från alla rader utom 1,2,6,7 så att det ser ut så här
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } |
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
1 2 3 |
<?php phpinfo(); ?> |
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
Nu är det färdigt, en webserver med php5 installerat
Discussion (7) ¬
Monkey är också en bra server för embedded system. Osäker på om det går att använda php med den dock. Finns på http://monkey-project.com/
Googlade runt lite och hittade hur man satte upp det med FastCGI, så jag kanske även skiver en artikel om hur man sätter upp Monkey med php via FastCGI. Jag har även tänkt att göra en prestandatext på de olika webservrarna på en Raspberry PI med statiska sidor och med php.
Det finns ett fel i instruktionen om hur man skapar en testfil i php. Vana användare fattar säkert direkt att det ska vara “nano” och inte “namn”. Om man följt förslaget tidigare gäller inte filstrukturen. Annars bra tips!
Tack så mycket för informationen, jag har rättat felen i artikeln
Tack så mycket för guiden! Trevligt initiativ med denna hemsida. Ett önskemål för framtiden – säkerhetsinställningar i nginx för att säkra upp servern. Keep up the good work!
Så himla bra att få denna hjälp!
Med vänlig hälsning
Lars
Glad pensionär