Můj vlastní webserver (Debian + Apache)
Zkoušel jsem si nainstalovat svůj webový server. Prvně jsem zkusil Ubuntu, ale na serveru s virtuálními stroji neměli poslední verzi. Pak jsem pátral po CentOS, protože by mělo mít některé lepší vlastnosti jako je omezení root adresáře i pro SFTP (pro FTP je to jednoduché všude). Z diskuzí jsem se dozvěděl, že práce s CentOSem není úplně tak uživatelsky přívětivá, když je člověk zvyklý ma Ubuntu. Takže jsem pak zapátral po Debianu a vzhledem k tomu, že Ubuntu je na něm postavené, ale staví se i na jeho nestabilních verzích, tak jsem zkusil Debian, který byl na diskuzích doporučen před Ubuntu.
Dynamické VirtualHosts
Abyste nemuseli pro každý nový web přidávat do konfigurace Apache web serveru nového virtual hosta, pomůže vám modul mod_vhost_alias.
Stačí aktivovat tento modul a upravit následující soubor:
#/etc/apache2/httpd.conf# mapuje domenu subdomain.example.cz do adresar /home/example.cz/webs/subdomain# takze pro www.example.cz je nutná struktura /home/example.cz/webs/www# pro url www.test.example.cz by mela fungovat struktura /home/example.cz/webs/www.test# pro url example.cz je treba vytvorit adresa /home/example.cz/webs/_VirtualDocumentRoot /home/%-2.0.%-1/webs/%-3+
Výše uvedenou strukturu jsem zvolil, aby byli oddělené weby, aby mohl mít jeden uživatel více subdomén. Pomocí dalšího nastavení lze nastavit root adresáře pro jednotlivé uživatele pro přístup přes SFTP, takže pokud bude existovat administrátor nějaké subdomény, tak se nastaví přístup pouze do adresáře subdomény.
Pokud bude na doménu nastavený záznam *.server.cz, tak může admin domény vytvářet subdomény bez omezení.
Virtual hosts pod kontrolou a bez restartu
Toto může být jedna z konfigurací, která také využívá VirtualDocumentRoot, takže si pak každý uživatel může vytvářet poddomény podle potřeb.
<VirtualHost *:80> ServerName www.example.cz ServerAlias radekzilka.cz *.example.cz # DocumentRoot /home/example.cz/webs/www VirtualDocumentRoot /home/%-2.0.%-1/webs/%-3+ <Directory /> Options FollowSymLinks AllowOverride All </Directory> </VirtualHost>
Pro znovu načtení konfigurace stačí spustit /etc/init.d/apache2 reload.
SSH
Instalací ssh se zabývat nebudu protože na virtuálním stroji musí být nainstalován. Nicméně je dobré
- vytvořit uživatele pomocí „adduser“, pak
- otestovat, jestli se nový uživatel připojí přes SSH
- nastavit v souboru /etc/ssh/sshd_config volbu „PermitRootLogin no“
Pak se můžete stále přihlásit přes SSH jako nový uživatel a následně použít příkaz „su“ pro spuštění terminálu s právy roota. Přikaz „sudo“ nemusí někdy fungovat.
Dále by možná bylo vhodné omezit SSH jenom pro určité uživatele. Stačí přidat do /etc/ssh/sshd_config volbu „AllowUsers uzivatel1 uzivatel2 …“, ale tím se bohužel vypne i SFTP přístup pro ostatní uživatele, což je nežádoucí
Řešením je nastavení uživateli jako výhozí sftp shell a přidat shell do známých shellů. Uživatel se sice jakoby přihlásí, ale nemůže nic dělat
usermod -s /usr/lib/sftp-server username
echo ‚/usr/lib/stfp-server‘ >> /etc/shells
FastCGI
Zapnout apache moduly
a2enmod fastcgi
a2enmod fsgid
a2dismod php5 (vypnout původní modul)
Dále vytvořit soubor php-fcgi-wrapper:
#!/bin/sh PHPRC=/etc/php5/cgi/ export PHPRC export PHP_FCGI_MAX_REQUESTS=500 export PHP_FCGI_CHILDREN=3 # při přístupu na vhosta to spustí 3 php procesy, které zaberou paměť exec /usr/lib/cgi-bin/php
Nastavit u virtual hostů
<VirtualHost *:80> ServerName www.myserver.cz ServerAlias myserver.cz *.myserver.cz #DocumentRoot /home/radekzilka.cz/webs/www VirtualDocumentRoot /home/%-2.0.%-1/webs/%-3+ # SuexecUserGroup myuser myusergroup <Directory /> AddHandler fcgid-script .php # Options FollowSymLinks Options +ExecCGI FCGIWrapper /home/user/..../php-fcgi-wrapper .php AllowOverride All </Directory> </VirtualHost>
Podobně se pak musí nastavit i konfigurace pro phpmyadmina, aby
Později by se to mělo spojit s suexec, aby se každý požadavek spouštěl pouze pod uživatelem dané domény, tím se zamezí čtení dat z cizích webů na stejném serveru.
suexec
konfigurace vhosta:
<VirtualHost *:80>
ServerName knihovna.polna.cz
# DocumentRoot /home/polna.cz/webs/knihovna
VirtualDocumentRoot /home/%-2.0.%-1/webs/%-3+
SuexecUserGroup polna.cz polna.cz
FcgidMaxRequestLen 15728640
<Directory />
AddHandler fcgid-script .php
# Options FollowSymLinks
Options +ExecCGI
FCGIWrapper /var/www/polna.cz/php-fcgi-wrapper .php
AllowOverride All
</Directory>
</VirtualHost>
V případě chyby zkontrolovat /var/log/apache/error.log a /var/log/apache/suexec.log.
Při použití SuexecUserGroup musí být FCGIWrapper v DocumentRootu server (nikoliv DocumentRoot vhosta). Je pak ale povolené adresáře pro vhosta nalinkovat kamkoliv a DocumentRootu nasměrovat na ten link nebo někam uvnitř.
Dále je pak nutné, aby adresář, kde je uložený wrapper měl stejného vlastníka a skupinu, jako je nastavené u SuexecUserGroup a pak taky aby wrapper neměl nastavené SUID nebo GUID.
SSL
V debianu sqeeze stačí zapnout SSL mod pomocí „a2enmod ssl“ a pak stačí zapnout ssl konfiguraci pro vhosty „a2ensite default-ssl“.
Další podrobnosti lze přečíst v souboru /usr/share/doc/apache2.2-common/README.Debian.gz
Není potřeba dělat žádné složité generování klíčů pomocí SSL.
.htaccess
Nezapomeň povolit v nastavení virtual hostů AllowOverride All.
Autentizace
cut -f 1,2 -d : /etc/shadow > .htpasswd
#.htaccess
AuthType Basic AuthName "By Invitation Only" AuthUserFile /etc/apache2/.htpasswd #Require user radek radezilka.cz #Require valid-user
Čas na serveru
nastavení správné časové zóny: dpkg-reconfigure tzdata
aktualizace přesného času: apt-get install ntpdate
Zálohování
zálohování: tar czvf abcfolder.tar.gz abcfolder
skript pro stažení záloh, ale chtělo by to HTTPS, viz výše SSL
MySQL
nastavení UTF8 přímo v nastavení serveru /etc/mysql/my.cnf
[mysqld] character-set-server=utf8 collation-server=utf8_general_ci