Nejprve instalace všeho potřebného (pozor na dlouhý řádek za příkazem yum)
yum install php php-devel php-gd php-imap php-ldap
php-mysql php-odbc php-pear php-xml php-xmlrpc curl curl-devel
perl-libwww-perl ImageMagick libxml2 libxml2-devel proftpd webalizer
perl-HTML-Parser perl-DBI perl-Net-DNS perl-Digest-SHA1 php-mbstring
pear channel-update pear.php.net
pear install MDB2
pear install MDB2_Driver_mysql
ted se upravi soubor /etc/httpd/conf/httpd.conf:
ExtendedStatus On
ServerAdmin
jmeno@domena.cz
ServerName www.domena.cz:80
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 10.20.30.0/24 192.168.1.0/24
</Location>
<Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from 10.20.30.0/24 192.168.1.0/24
</Location>
Samozřejmě, že direktivy ServerAdmin, ServerName a Allow from se nastaví dle konkrétních jmen a IP adres.
V adresáři /var/www/html/ vytvoříme soubor s názvem info.php a s následujícím obsahem:
<?php
phpinfo();
?>
a už se Apache může spustit:
service httpd start
Na adrese www.domena.cz by již měla naskočit uvítací stránka Apache, na adrese www.domena.cz/server-info se zobrazí aktuální konfigurace Apache (proto ten omezený přístup v "Allow from"), na www.domena.cz/server-status jsou informace o běhu www-serveru a nakonec na adrese www.domena.cz/info.php budou informace o verzi a konfiguraci PHP
php.ini
Při defaultní instalaci je soubor php.ini umístěn v /etc. Tento soubor je většinou nutno přizpůsobit používaným programům. Jedná se hlavně o:
short_open_tag = On
date.timezone = Europe/Prague
max_execution_time = 60
register_globals = Off
safe_mode = Off
post_max_size = 8M
file_uploads = On
upload_max_filesize = 32M
short_open_tag povoluje krátky zápis ( "<?" místo "<?php" ), max_execution_time určuje povolenou dobu běhu scriptu (implicitních 30sec je málo, někdy nestačí ani zde uvedených 60sec). Hodnoty registr_globals a safe_mode se nastaví dle požadavků instalovaných programů - samozřejmě, že je potřeba vzít v úvahu i celkovou bezpečnost serveru. Je lepší nastavit globálně bezpečné hodnoty a případné změny povolovat lokálně buď v .htaccess, nebo pomocí php_admin_flag a php_admin_value v konfiguraci virtuálních webů v sekci <VirtualHost>.
Virtuální weby
Pro vytvoření virtuálních webových stránek je zapotřebí do sekce "Virtual Hosts" doplnit například:
NameVirtualHost 10.20.30.40
<VirtualHost 10.20.30.40:80>
ServerName localhost
DocumentRoot /var/www/html/redir
<Directory /var/www/html/redir>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
<VirtualHost 10.20.30.40>
ServerName cacti.domena.cz
DocumentRoot /usr/share/cacti
</VirtualHost>
<VirtualHost 10.2.30.40>
ServerName user.domena.cz
DocumentRoot /var/www/html/user
<Directory /var/www/html/user>
Order deny,allow
Deny from all
Allow from 10.20.30.0/24 172.20.0.0/16 172.21.0.0/16
</Directory>
</VirtualHost>
<VirtualHost 10.20.30.40>
ServerName domena.cz
ServerAlias www.domena.cz domena.eu www.domena.eu
ServerAdmin
webmaster@domena.cz
DocumentRoot /var/www/html/hlavni
<Directory /var/www/html/hlavni>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Posloupnost virtuálních domén se vyhodnocuje "odzadu", tedy pokud server nenalezne patřičný záznam pro sub-doménu, zobrazí stránky definované prvním "VirtualHostem". Je proto vhodné, aby na prvním místě byl definován "systémový" virtuální server, kde se budou zobrazovat stránky s informacemi o neplatné adrese ("...přistupujete na tyto stránky buď pomocí IP adresy, nebo zadaná adresa neexistuje...."). Toto je ve výše uvedeném příkladu zobrazeno (ServerName localhost).
Jako další je v ukázce definován virtuální web "cacti.domena.cz". Systém Cacti (monitoring) má svůj vlastní konfigurační soubor v ( /etc/httpd/conf.d/cacti.conf ), proto je zde definován jen vlastní virtuál. Directivy "Alias", "Directory" apod. by zde byly definovány duplicitně.
Následuje již běžný virtuální web (doména 3. úrovně), kde jsou navíc definovány IP rozsahy, ze kterých je na tyto stránky povolen přístup.
A nakonec je ukázka webu s doménou 2. úrovně, navíc je pomocí directivy "ServerAlias" definováno více URL, které se budou tímto virtuálním serverem zobrazovat.
Virtuální servery je však také možno definovat samostatnými konfiguračními soubory, pro každý virtuální web jeden soubor. V tom případě se do /etc/httpd/conf/httpd.conf do sekce "VirtualHost" zapiše pouze
Include /etc/httpd/conf/vhosts/
A do adresáře /etc/httpd/conf/vhosts/ se umístí samostatné konfigurační soubory. Je však potřeba počítat s tím, že se tyto konfigurační soubory načítají v abecedním pořadí, proto je vhodné, aby jméno těchto souborů začínalo číslem. Například:
Soubor se jménem 100_NameVirtualHosts.conf bude obsahovat:
NameVirtualHost *:80
Obsah souboru 200_SharedIP.conf (implicitní stránky zobrazené v případě, že žádná jiná definice adresy nevyhovuje, nebo je přístup na stránky pomocí IP adresy):
<VirtualHost *:80>
ServerName localhost
ServerAdmin root@localhost
DocumentRoot /var/www/html/sharedip
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
</IfModule>
</VirtualHost>
A následují již běžné uživatelské stránky. Čísla u těchto stránek mohou být libovolná, větší než 200. Já používám hodnotu UID uživatele, kterému je stránka přiřazena (tedy >500). Např. 531_uzivatel.domena.net.conf :
<VirtualHost *:80>
ServerName uzivatel.domena.net
ServerAlias www.uzivatel.domena.net uzivatel.domena.eu www.uzivatel.domena.eubr
ServerAdmin
webmaster@domena.net
DocumentRoot "/var/www/html/chroot/home/uzivatel/"
# Povoleny vlastni cgi-scripty
Alias /cgi-bin/ /var/www/html/chroot/home/uzivatel/cgi-bin/
AddHandler cgi-script .cgi
AddHandler cgi-script .pl
# Vlastni logy
ErrorLog "/var/www/html/chroot/home/uzivatel/log/error.log"
CustomLog "/var/www/html/chroot/home/uzivatel/log/access.log" combined
# PHP
php_admin_flag safe_mode On
php_admin_value open_basedir /var/www/html/chroot/home/uzivatel/
php_admin_value file_uploads 1
php_admin_value upload_tmp_dir /var/www/html/chroot/home/uzivatel/phptmp
php_admin_value session.save_path /var/www/html/chroot/home/uzivatel/phptmp
<IfModule mod_ruby.c>
<Directory /var/www/html/chroot/home/uzivatel>
Options +ExecCGI
</Directory>
RubyRequire apache/ruby-run
#RubySafeLevel 0
<Files *.rb>
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance
</Files>
<Files *.rbx>
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance
</Files>
</IfModule>
<IfModule mod_python.c>
<Directory /var/www/html/chroot/home/uzivatel/>
Options +Indexes +FollowSymLinks +MultiViews
AllowOverride All
Order allow,deny
allow from all
AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug On
</Directory>
</IfModule>
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
AddType application/vnd.wap.wmlscriptc .wmlsc .wsc
AddType text/vnd.wap.wml .wml
AddType text/vnd.wap.wmlscript .ws .wmlscript
AddType image/vnd.wap.wbmp .wbmp
Alias /error/ "/var/www/html/chroot/home/uzivatel/error/"
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
</IfModule>
<Directory /var/www/html/chroot/home/uzivatel/cgi-bin>
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
# <Directory /var/www/html/chroot/home/uzivatel/webalizer/>
# konfigurace webalizeru
# </Directory>
</VirtualHost>
Výhodou tohoto řešení je přehlednost v případě, že se každý virtuální web definuje (jako v tomto případě) s mnoha nastaveními. V httpd.conf například nemusí být vůbec definováno php, a je tedy možné jej povolovat individuálně. Dále je možné (tento příklad) povolit jen tomuto uživateli scripty, podporu jazyka Python a Ruby, vlastní logy, vlastní chybové stránky, nastaveni PHP apod., u jiného zákazníka pak tyto sekce nemusí být a pak má povolen třeba jen základní html, bez php a dalších featur. Pokud však bude mít zákazník povoleny odkazy do svého domovského adresáře (vlastní logy, vlastní chybové hlášky apod.), bývá občas problém s příliš horlivým zákazníkem - takový zákazník nerespektuje, že tyto adresáře potřebuje systém k chodu a smaže je. A při rebootu serveru pak httpd nenajede. Protože do těchto adresářů musí mít zákazník práva k zápisu (vytváření vlastních chybových hlášek nebo odmazávání starých logů), nelze tento problém řešit pomocí přístupových práv. Apache nemá možnost testu, zda adresář existuje (něco po vzoru IfModule), proto to nejde ani obejít podmíněnou konfigurací. Já jsem to zatím vyřešil tak, že do těchto adresářů umisťuji soubory s názvem "adresar_nemazat" s nulovou délkou, ale s majitelem root:root a právy 400.
Přesměrování zákazníků na informační stránky
Systém ISPadmin má možnost přesměrování zákazníků na informační stránky. Někdy se však hodí možnost některého zákazníka přesměrovat ručně na stránku vytvořenou jen pro něj. To se provede zapsáním potřebných pravidel do NATu routeru Mikrotik. V NATu lze však provádět přesměrování jen na IP adresu + port, nelze tedy využívat adresářovou strukturu v URL. Proto je zapotřebí vytvořit na webovém serveru i stránky s virtual-host pro IP:port. Do souboru /etc/httpd/conf/httpd.conf je tedy zapotřebí dopsat:
Listen 80
Listen 8001
Listen 8002
Listen 8003
....
....
....
NameVirtualHost 10.20.30.40:8001
<VirtualHost 10.20.30.40:8001>
ServerName vir
DocumentRoot /var/www/html/ispadmin/vir
AddDefaultCharset iso-8859-2
</VirtualHost>
NameVirtualHost 10.20.30.40:8002
<VirtualHost 10.20.30.40:8002>
ServerName upominka
DocumentRoot /var/www/html/ispadmin/upominka
AddDefaultCharset iso-8859-2
</VirtualHost>
NameVirtualHost 10.20.30.40:8003
<VirtualHost 10.20.30.40:8003>
ServerName nezaplaceno
DocumentRoot /var/www/html/ispadmin/nezaplaceno
AddDefaultCharset iso-8859-2
</VirtualHost>