Turris jako webserver - Apache a PHP

Již nějakou dobu mám doma router Turris a až nyní jsem našel čas na to abych si s ním začal tak trochu „hrát“. První věc, která mě napadla že by stála za to, byl webserver. Platím si vlastní doménu a k ní 500MB hosting. Nic moc prostor a tak proč když mám doma router s veřejnou IP adresou si neudělat hosting doma. Turris má v sobě integrovanou čtečku SD karet a tak několik gigabajtů vyjde skoro zadarmo.

Co jsem pro to musel všechno udělat a upravit?

Je potřeba nainstalovat balíčky
opkg update
opkg install apache php5 php5-cgi php-cli php5-mod-gd php5-mod-mysql zoneinfo-europe

Po nainstalování balíčků je potřeba upravit soubor httpd.conf (/etc/apache/httpd.conf).
Když jsem ho poprvé otevřel tak v něm bylo spousta zakomentovaných částí. Trochu jsem se v tom nevyznal a tak jsem to celý promazal. Zbylo mi tam asi jen to důležité.

ServerRoot jsem nechal takový jaký byl (/usr).

Listen 80
Server má poslouchat na portu 80.

<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
User www-data
Group www-data
</IfModule>
</IfModule>

Část, která určuje pod kterým uživatelem webový server poběží. Je dobré mít založeného samostatného uživatele protože root je moc silný (Ve výchozí konfiguraci je uživatel nobody a skupina nogroup).

DocumentRoot "/mnt/tsd/www"
Adresář ve kterém se budou nacházet stránky. U mě je umístěn na sd kartě.

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Allow from all
</Directory>
<Directory "/usr/share/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

Umožnění přístupu do potřebných adresářů.

<FilesMatch "^.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

Znepřístupnění určitých souborů (např. .htaccess).

ErrorLog "/var/log/error_log"
LogLevel debug
<IfModule log_config_module>
    LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
    LogFormat "%h %l %u %t "%r" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio
    </IfModule>
    CustomLog "/var/log/access_log" common
</IfModule>

Logování je základ úspěchu :-).

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

Nastavení jak se jmenují index stránky. Server je vyhodnocuje v pořadí v jaké jsou zde nastaveny. Takže nejdříve se pokusí najít index.php a až následně pokud ho nenalezne tak index.html.

DefaultType text/plain
Výchozí MIME typ.

A ještě několik věcí kvůli PHP.

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/usr/share/cgi-bin/"
    ScriptAlias /php/ "/usr/bin/"
</IfModule>


<IfModule mime_module>
    TypesConfig /etc/apache/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType application/x-httpd-php .php
</IfModule>


Action application/x-httpd-php "/php/php-cgi"

A pak ještě zprovoznit vhosty.
Include /etc/apache/extra/httpd-vhosts.conf
Tuto řádku stačilo odkomentovat a zbytek nastavení je pak samostatně v souboru httpd-vhosts.conf (/etc/apache/extra/httpd-vhosts.conf).
Tohle mi zatím stačilo na to abych mohl na jedné ip adrese provozovat více stránek.

Po nahození apache pomocí příkazu
apachectl restart
jsem zkusil jak se mi to podařilo.
Do adresáře /mnt/tsd/www jsem umístil jednoduchou stránku index.html.
Přístup na adresu se podařil a html se zjevilo.
Problém nastal u index.php. Server začal hlásit
No input file specified.
Po chvilce googlení jsem musel přenastavit i php.ini (/etc/php.ini).

doc_root =
Původní doc_root byl nastaven na /www

extension=gd.so
Bylo také potřeba odkomentovat extension gd.so.

Další z mnoha restartů apache serveru a pak už php frčelo a mohl jsem se pustit do tvorby stránek. :-).

Turris, Webserver, Apache, PHP

-
Kája z Norska
Kája z Norska

Jsem programátor, horolezec a tak trochu FlexiBee fanatik :-).
Na CharlieBlogu sepisuji své nápady a poznatky už od roku 2006.