Buffalo LS220 – apache web server och PHP

Apache httpd och PHP på Buffalo LS220

Testad upp till firmware 1.70 (14 sepember 2018)

En del av Buffalo LS220 – BAMP – Buffalo Apache MySQL PHP

Apache httpd kommer förinstallerad på LS220. Riktigt kasst konfigurerad, och är tänkt att bara användas för webguiet. Bl.a. ligger en hel del av konfigurationen innästlad i ett <VirtualHost>-block, så aktiverar man de extra konfigurationsfilerna kommer det bli virtualhosts inne i virtualhost-blocket, vilket inte funkar särskilt bra.

Från root-patchad till httpd på en till port

HIttade en hel del i mitt grävande i filstrukturen på den när man väl följt instruktionerna för att kunna ta sig in på den via SSH

* Apache httpd (2.2) finns där för WebAccess. Konfiguration, binärfiler och innehåll ligger i en struktur under /usr/local/webaxs
* Under webaxs/bin finns en del blandade gamla binärer, bl.a en äldre version av perl
* Under webaxs/www ligger WebAccess guiet
* /var/www/webui innehåller det aktuella webbaserade admin-gränssnittet för konfiguration
* PHP 5.3.23 finns installerad, /usr/bin/php-cgi, konfiguration /etc/php.ini
* /www innehåller en hel del rester från Buffalos gamla webadmin (kanske nåt som används också, allt i helt normal Buffalo-stil)

Idén jag ville prova var att starta en PHP-hanterande webserver på port 8000. Har med vissa ful-lösningar runt Buffalos konstigheter fått igång den nu, och ser att den PHP-binär som finns där har rätt så mycket inkompilerat, bl.a stöd för curl, iconv och mysql, så den är inte helt oanvändbar.

Har stött på ett antal problem som jag gått runt:
* i Buffalos httpd.conf för WebAccess har dom lagt in konfigurationen för port 9000 där WebAccess körs direkt i httpd.conf, och dessutom på ett galet sätt – en stor del av huvudkonfigurationen har dom nästlat in i direktivet, så det går inte aktivera inkluderingen av “extra/httpd-vhosts.conf” då det isåfall skulle innebära en <VirtualHost> inne i <VirtualHost>
* Alternativet att lägga in include-raden i slutet på httpd.conf fungerar – men bara tills man ändrar på nåt i konfigurationen via webadmin – för då återställs httpd.conf till den vanliga, trasiga (och det innebär att det inte är nån idé att bygga den på rätt sätt heller), och httpd för WebAccess startas om (så vhosten slutar fungera direkt)

Så här gjorde jag (minimalt för att få det att fungera)

WebAccess måste aktiveras från Buffalons startsida eller “File sharing / Web Access” på den vanliga konfigurationen (det är den del som förstör konfigurationsfilen så att även include hamnar inuti ett virtualhost-block).
Skapa /mnt/array1/web på lämpligt sätt (alltså en share med namnet “web”), och ställ delning och rättigheter som du vill ha det
Skapa ”vhost1” inne i ”web” på valfritt sätt.
Skapa ”logs” inne i ”web” på valfritt sätt (för loggfiler, vi vill inte ha dom åtkomliga för en besökare från utsidan)

Gör en minimal PHP-fil för att kunna testa att det fungerar:
/mnt/array1/web/vhost1/index.php
En minimal testfil som visar information om PHP och allt som är konfigurerat där

<?php
phpinfo();
?>

httpd-vhosts.conf
För att göra så lite fel som möjligt, så lägger jag min virtualhost, port 8000 i “httpd-vhosts.conf”
Jag sparar filen i ‘/mnt/array1/web’ för att den inte ska gå förlorad vid en uppdatering av firmware.

Listen 8000
NameVirtualHost *:8000

<VirtualHost *:8000>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/mnt/array1/web/vhost1"
ServerName vhost1.example.com
DirectoryIndex index.php index.html

ErrorLog "/mnt/array1/web/logs/vhost1-error.log"
CustomLog "/mnt/array1/web/logs/vhost1-access.log" common

ScriptAlias /local-bin /usr/bin
AddHandler application/x-httpd-php5 php
Action application/x-httpd-php5 /local-bin/php-cgi
</VirtualHost>

Ta bort skräp-httpd-vhosts.conf (default, med exempel), länka in den nya

rm /usr/local/webaxs/apache/conf/extra/httpd-vhosts.conf
ln -s /mnt/array1/web/httpd-vhosts.conf /usr/local/webaxs/apache/conf/extra/

Lägg till följande rad sist i httpd.conf
Include conf/extra/httpd-vhosts.conf

echo >>/usr/local/webaxs/apache/conf/httpd.conf "Include conf/extra/httpd-vhosts.conf"

Starta om webservern

/usr/local/webaxs/apache/bin/apachectl restart

Prova om det funkar
Skriv in din NASs IP-adress i URL-rutan i webläsaren, port 8000 (:8000 på slutet)

Förbered för enklare återställning vid uppdatering:
/mnt/array1/web/link-httpd-vhost-conf.sh (chmod 700)

#!/bin/sh
rm /usr/local/webaxs/apache/conf/extra/httpd-vhosts.conf
ln -s /mnt/array1/web/httpd-vhosts.conf /usr/local/webaxs/apache/conf/extra/
/usr/local/webaxs/apache/bin/apachectl restart

Lägg till i /mnt/array1/buffalo_fix.sh

# check that configuration has not been reset
if ! cat /usr/local/webaxs/apache/conf/httpd.conf | grep '^Include conf/extra/httpd-vhosts.conf' > /dev/null 2>&1; then
  echo >>/usr/local/webaxs/apache/conf/httpd.conf "Include conf/extra/httpd-vhosts.conf"
fi

# Restart Apache if not listening to port 8000
exec 6<>/dev/tcp/127.0.0.1/8000 2>&1>/dev/null || /usr/local/webaxs/apache/bin/apachectl restart

Scriptet kollar om det finns en rad i httpd.conf som börjar med “Include conf/extra…”. Ifall raden är borta, så läggs den dit igen och httpd startas om.
På det här sättet blir det ett avbrott på högst 5 minuter efter det att konfigurationen skrivs över..

Efter att ha uppdaterat firmware

Efter en firmware-uppdatering så förstörs en del av konfigurationen i sedvanlig Buffalo-stil.

Länka tillbaks ‘httpd-vhosts.conf’ från ‘/mnt/array1/web’ genom att köra scriptet som skapades för det:

/mnt/array1/web/link-httpd-vhost-conf.sh

Lägg tillbaks include-raden i httpd.conf

echo >>/usr/local/webaxs/apache/conf/httpd.conf "Include conf/extra/httpd-vhosts.conf"

Starta om webservern

/usr/local/webaxs/apache/bin/apachectl restart

Kolla att det fungerar.

Scriptet som är inlagt i cron-jobbet sedan tidigare ska både lägga till vhost konfiguration och starta om httpd ifall det behövs. Har du gjort enligt mina tidigare instruktioner är det enda som behöver göras efter uppdatering att länka tillbaka din httpd-vhosts.conf till ‘/usr/local/webaxs/apache/conf/extra/’.

One thought to “Buffalo LS220 – apache web server och PHP”

Leave a Reply

Your email address will not be published.