Mit diesem Paket ist es möglich, den Apache Webserver entweder allein oder mit zusätzlichem PHP CGI Binary zu erstellen.
Apache ist unter Testing zu finden, PHP unter Standard packages.
Das Paket enthält die minimale Verzeichnisstruktur für Apache + PHP. Die
Konfigurationsdateien bedürfen wahrscheinlich noch einiger Anpassungen
an die jeweiligen Bedürfnisse, bevor das ganze dann entweder manuell auf
ein an die Box angeschlossenes USB-Gerät (USB-Stick, Festplatte) - oder
aber ins Verzeichnis root
(zur Integration ins Firmware-Image) kopiert
werden kann.
Man kann PHP auch ohne den Apache erstellen; das CGI Binary
(sapi/cgi/php
) ist anschließend unter packages/php-x.y.z zu finden
(php-cgi) Wer hingegen das CLI Binary (sapi/cli/php
) benötigt, muss es
sich leider selbst besorgen.
Beide Pakete, Apache sowohl auch PHP werden standardmäßig dynamisch gegen die benötigten Bibliotheken gelinkt. Wer statische Binaries bevorzugt, kann dies jedoch mit entsprechenden Einstellungen anpassen.
Werden spezielle Features (etwa SSL für Apache, XML Handling in PHP, etc.) benötigt, müssen die Makefiles entsprechend angepasst werden. Entsprechende Tipps und Tricks finden sich im Forum.
Das Apache Paket befindet sich nach dem Build in packages/apache-x.y.z, ebenso ist dort die Config für PHP zu finden. Das PHP Binary wird automatisch in das Firmware Image gepackt, dies ist auf Grund der Größe nicht zu empfehlen. Besser ist folgende Vorgehensweise:
ln -s /var/media/ftp/uStor01/apache/logs /var/logs
Danach kann man die Apache Befehle direkt verwenden (z.B. apachectl start|stop|restart):
/var/media/ftp/uStor01/apache/bin/apachectl start
Verwendet man kein selbsterstelltes Binary, so sollte (muss) man Apache mittels folgendem Befehl starten:
httpd-2.2.4/bin/apachectl -f /Pfad/zur/Apache/Config/httpd.conf -k start
Action php-script /cgi-bin/php-cgi
AddHandler php-script .php
Für CGI’s muss folgende Zeile hinzugefügt/auskommentiert werden:
AddHandler cgi-script .cgi
Es kann auch eine bereits fertiger Apache2 Binary mit dem oben beschriebenem PHP Binary verwendet werden.
Wird z.B. mod_proxy bzw. sogar mod_proxy_html benötigt empfehle ich das fertige Binary aus diesem Thread.
Der User muss auf einen vorhandenen User abgeändert werden (der User root ist nur bei speziellen Binaries möglich).
Derzeit (Stand Juli 2011) kann folgendes verwendet werden:
User boxusr80
Group root
Sollen die .htaccess Dateien verwendet werden, so muss für das entsprechende Verzeichnis AllowOverride entsprechend angepasst werden (man kann auch einfach “AllowOverride All” verwenden)
Hier eine entsprechende Config für ein Verzeichnis (diese ermöglicht [jedem] den Zugriff!):
<Directory "/var/media/ftp/uStor01/apache/htdocs">
Options All
AllowOverride All
Order allow,deny
Allowfrom all
</Directory>
<Directory "/var/media/ftp/uStor01/apache/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all</Directory>
Soll ein Verzeichnis mittels .htaccess vor autorisiertem Zugriff geschützt werden kann folgendes hinzugefügt werden:
AuthType
Basic AuthUserFile /path/to/.ht.password !AuthName "Die Website erfordert Zugangsdaten" require valid-user
Wichtig : im apache Ordner befindet sich htpasswd, mit dem man die Passwortdatei erstellen kann.
htpasswd -c/path/to/.ht.password username
(Dies erstellt eine neue oder [überschreibt] die vorhandene Passwortdatei mit dem angegebenem Usernamen)
Um Benutzer zur Passwortdatei hinzuzufügen folgendes benutzen:
htpasswd/path/to/.ht.password username
Es ist generell empfehlenswert vor zu schützenden Daten das Kürzel .ht anzugeben, dadurch bekommt der Benutzer die Datei nicht zu sehen.
Ein guter Einsatzzweck des Apaches ist es, ihn als Proxy zu verwenden.
Dies kann wie folgt aussehen: Nach extern ist nur der Port 80 freigegeben. Gibt der user z.B. freetz.meinedomain.at ein, so kommt er auf das Freetz-Interface bei fritzbox.meinedomain.at auf das AVM-Interface usw.
Der Vorteil besteht dabei, dass man nur einen Port nach außen freigeben muss, und zusätzlich kann man die einzelnen Seiten auch mit einem Passwort sichern. (Die Fritzbox kann z.B. nicht mehr zurückgesetzt werden, wenn vorher ein Passwort eingegeben werden muss.
Umsetzung: Nötig ist dafür ein Apache mit dem Modul Proxy. Ich verwende hierfür das von MaxMuster erstellte Binary.
Die Einrichtung erfolgt wie weiter oben beschrieben. Für jede zusätzliche Website, welche angezeigt werden soll, muss ein VirtualHost erstellt werden. Hier eine Beispielkonfiguration um das Freetz-Interface über freetz.meinedomain.at anzeigen zu lassen:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://localhost:81/
ProxyPassReverse / http://localhost:81/
ServerName freetz.meinedomain.at
<Proxy *>
Order Deny,Allow
Allow from all
</Proxy>
<Location />
Require valid-user
AuthType basic
AuthName "Passwortgeschuetzt - Login"
AuthUserFile /Pfad/zur/Datei/.htpasswd
</Location>
</VirtualHost>
Das Location Element bewirkt, dass der Benutzer sich vor dem Seitenaufbau anmelden muss.
Bestimmte Länder können über eine .htaccess
-Datei blockiert werden, XX
entsprechend ersetzen:
<IfModule mod_geoip.c>
GeoIPEnable On
# SetEnvIf GEOIP_COUNTRY_CODE XX AllowCountry
# Require env AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE XX BlockCountry
<RequireAll>
Require all granted
Require not env BlockCountry
</RequireAll>
</IfModule>
Sollte jemand auf die Idee kommen, ein CMS auf der Fritzbox laufen zu lassen, so empfehle ich phpSqliteCms dies ist ein sehr smartes und schnelles CMS welches problemlos auf der Box läuft (nur die Bildkomprimierung sollte man nicht nutzen).Andere CMS wie Joomla!, Kajona, oder gar Drupal sollte man aufgrund der geringen Systemleistung der FritzBox vergessen. Außer man kann mit Seitenaufbauzeiten von 1-3 Minuten leben (dafür muss die php.ini angepasst werden).