Skip to content

Lighttpd 1.4.82⚓︎

Mit diesem Paket ist es möglich, den lighttpd Webserver zu erstellen.

Einrichtung⚓︎

Um den Webserver nutzen zu können, muss ein Verzeichnis erstellt werden, in dem der lighttpd agieren kann. Dieses muss unbedingt erstellt und mit den nötigen Rechten versehen werden.

Unbedingt beachten: In dieser Anleitung wird angenommen, dass USB-root genutzt wird. Sollte USB-root nicht verwendet werden, muss auf die folgenden Verzeichnisstrukturen noch größeres Augenmerk gelegt werden. In solch einem Fall könnte /var/media/ftp/uStor01/rootfs/www eine Analogie für /www sein.

Zunächst muss eine Konsolensitzung mit dem Router bestehen, es spielt keine Rolle, ob dafür Telnet oder SSH genutzt wird.

# erstelle Webserver-Verzeichnis und setze 'rwxr-xr-x'-Rechte
mkdir /www
chmod -R 755 /www

Nun kann man im Freetz-Konfigurationsfrontend die Einstellungen für den lighttpd anpassen und übernehmen. Daraufhin wird die benötigte Verzeichnisstruktur innerhalb des Webserver-Verzeichnisses angelegt. Die Dokumente müssen im Verzeichnis /www/websites liegen. Je nach Einstellung ist der Server nun bspw. über http://fritz.box:8008 verfügbar.

Perl⚓︎

Will man Perl-Skripte mit dem Webserver benutzen und den chroot-Modus benutzen, muss man sich darum kümmern, dass das Paket microperl sowie dessen Bibliotheken in die Verzeichnisstruktur des lighttpd kopiert wird.

# kopiere 'microperl' als 'perl' in das '/usr/bin'-Verzeichnis des Webservers
cp -p /usr/bin/microperl /www/usr/bin/perl

# erstelle ein Verzeichnis '/lib' für die Bibliotheken
mkdir /www/lib

# kopiere die von 'microperl' benötigten Bibliotheken in das '/lib'-Verzeichnis des Webservers
# Abhängigkeiten können mit 'ldd /usr/bin/microperl' ausgegeben werden
cp -p /lib/ld-uClibc.so.0 /www/lib
cp -p /lib/libc.so.0 /www/lib
cp -p /lib/libgcc_s.so.1 /www/lib
cp -p /lib/libm.so.0 /www/lib

Wenn neben *.cgi-Dateien auch *.pl-Dateien ausgeführt werden sollen, muss außerdem noch eine Zeile in die 'Additional'-Konfiguration von lighttpd (zu finden im Freetz-Konfigurationsmenü unter Settings'lighttpd: Additional):

# aktiviere CGI Unterstützung für *.pl-Dateien
cgi.assign += ( ".pl" => "/usr/bin/perl" )

Außerdem muss darauf geachtet werden, dass jegliche Perl-Skripte Ausführrechte haben, dies ist mit einem einfachen chmod 755 DATEI.pl zu erledigen.

Lua⚓︎

make menuconfig:

  • lighttpd > build with LUA support
  • lighttpd > lighttpd Modules > include mod_magnet

Example:

  • put this in lighttpd > Additional:
server.modules += ( "mod_magnet" )
magnet.attract-physical-path-to = ( server.document-root + "/ip.lua" )
  • put this in ip.lua in your document root:
lighty.header["Content-Type"] = "text/html"
lighty.content = { "Your IP-address is: ", lighty.env["request.remote-ip"] }
return 200
  • browse to http://fritz.box:/ip.lua

Geoblocking⚓︎

Um die Zugriffe aus bestimmten Ländern zu sperren werden die Lighttpd-Module mod_magnet und mod_maxminddb genutzt. Dadurch wird die Library libmaxminddb ausgewählt welche eine GeoLite2-City.mmdb-Datenbank (~70MB) benötigt die von https://github.com/P3TERX/GeoLite.mmdb/ heruntergelden werden kann.

Ausserdem ein LUA-Script geoblock.lua, XX entsprechend anpassen:

if (lighty.r.req_env["GEOIP_COUNTRY_CODE"] == "XX") then return 403 end
return 0

Erweiterung der Lighttpd-Konfiguration, die Pfade der .lua und .mmdb sind anzupassen:

server.modules += ( "mod_maxminddb" )
maxminddb.activate = "enable"
maxminddb.db = "/var/media/ftp/GeoLite2-City.mmdb"
maxminddb.env = (
 "GEOIP_COUNTRY_CODE"   => "country/iso_code",
 "GEOIP_COUNTRY_NAME"   => "country/names/en",
 "GEOIP_CITY_NAME"      => "city/names/en",
 "GEOIP_CITY_LATITUDE"  => "location/latitude",
 "GEOIP_CITY_LONGITUDE" => "location/longitude",
)

server.modules += ( "mod_magnet" )
magnet.attract-raw-url-to = ( "/var/media/ftp/geoblock.lua" )

Advantage over PHP: small, fast, low memory usage, feature rich programming language.