Tartalomjegyzék
Apache webszerver
- Szerző: Sallai András
- Copyright © Sallai András, 2011, 2012, 2014, 2019
- Licenc: GNU Free Documentation License 1.3
- Web: https://szit.hu
Apache beszerzése
Telepítés után
Főbb könyvtárak, fájlok
- /etc/apache2/
- /usr/sbin/apache2ctl
- /usr/sbin/apache2
- /var/www
/etc/apache2
- conf-available/ (Alkalmazások beállításai)
- conf-enabled/ (Beállított alkalmazás konfigurációk)
- mods-available/ (Elérhető modulok)
- mods-enabled/ (Betöltendő modulok)
- sites-available/ (Elérhető sitok)
- sites-enabled/ (Elérhető modulok)
- apache2.conf (Rendszer által beállított)
- envvars (Környezeti változók)
- httpd.conf (Saját beállításaink)
- ports.conf (Portok)
Indítás, leállítás, státusz
Apache kezelés
Leállítás:
systemctl stop apache2
Indítás:
systemctl start apache2
Újraindítás:
systemctl restart apache2
Újratöltés:
systemctl reload apache2
Apache állapot lekérdezése
Státusz lekérdezése:
systemctl status apache2 apache2.service - The Apache2 HTTP Server Loaded: loade ... Active: active (running)... ...
Ha webszerver nem fut:
Active: inactive (dead)
Bővebb állapot-lekérdezés localhoston, de szükséges hozzá egy lynx böngésző:
apache2ctl status
Még bővebb állapot-lekérdezése:
apache2ctl fullstatus
Debian démon indító, leállító script:
invoke-rc.d apache2 start invoke-rc.d apache2 stop ...
Konfigurációs állományok
Minden konfigurációs fájl plain text fájl. Forrásból való telepítés után a konfigurációs fájl általában egyetlen állomány:
apache2.conf
A helye fordítási időben beállított, de a -f kapcsolóval más konfigurációs állomány is megadható. Ha más konfigurációs fájlokat is szeretnék belefoglalni az fő konfigurációs fájlba a Include kulcsszóval tehető meg.
A konfigurációs állomány nem kis és nagybetű érzékeny (nem Case Sensitive). A nagy és kisbetűk használata az átláthatóságot szolgálja.
Minden újabb beállítás után újratöltjük a konfigurációs fájlt
/etc/init.d/apache2 reload
Konfigurációk
Porthoz és IP-hez kötés
A szerver a 80-as és 8000-es porton is hallgasson:
Listen 80 Listen 8000
A szerver két interfészen fogadjon el kéréseket:
Listen 192.170.2.1:80 Listen 192.170.3.1:8000
IPV6 esetén:
Listen [2001:db8::a00:20ff:fea7:ccea]:80
A konfigurációs állományban több Listen parancs is elhelyezhető, az apache az összes beállított porton fogadja a kéréseket.
Modulok használata
Az apache moduláris felépítésű szerver. Telepítés után csak az alapfunkciók vannak betöltve alapból. A modulok betöltése a LoadModule direktívával történik.
Például a php5 modul betöltése:
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
A php5_mudule a mudul neve. A /usr/lib/apache2/modules/libphp5.so a fájlnév elérési úttal együtt.
Debian GNU/Linux alatt nem szükséges szerkesztenünk a modulokat tartalmazó részeket, mivel a modul kezelésre külön scripteket hoztak létere. Ezek:
a2enmod a2dismod
Az a2enmod engedélyezi egy modul használatát, az a2dismod letiltja egy modul használatát.
A telepítés után hiányzó modulokat külön telepíteni kell, pl. egy apt-get install paranccsal. Hogy éppen milyen modulok érhetők el, tölthetők be a következő könyvtár listázásával deríthető ki:
ls /etc/apache2/mods-available
A kimenetben ehhez hasonló állományokat láthatunk:
auth_basic.load auth_digest.load ...
PHP5 engedélyezése parancssorból:
e2enmod php5
Ellenőrizhetjük, hogy a php5 modul engedélyezve lett-e:
ls /etc/apache2/mods-enabled/php5.load
Site-ok kezelése
A site-ok kezelésére két script áll rendelkezésünkre:
a2ensite a2dissite
Hozzáférhető site-ok helye:
/etc/apache2/sites-available
A hozzáférhető sitok könyvtárában telepítés után találunk egy default állomány, amely a host alapbeállításait tartalmazza.
/etc/apache2/sites-available/default
A host alkönyvtáraira vonatkozó beállítások
Hatáskörök
A hatáskörök megmondják a beállítások hol érvényesüljenek.
Megadható hatáskörök:
- Könyvtár
- Fájl
- Webhely
Direktívák
A hatóköröket úgynevezett direktívákkal adjuk meg:
- <Directory>
- <DirectoryMatch>
- <Files>
- <FilesMatch>
- <Location>
- <LocationMatch>
- <VirtualHost>
Minden direktíva nevét a „kisebb mint” és a „nagyobb mint” jelek között adjuk meg. A direktíváknak mindig van egy lezáró részük. A lezárórész úgy néz ki mint a nyitó, de „kisebb mint” jel után egy perjelet is teszünk:
<direktíva_név> ... </direktíva_név>
Az így megadott nyitó és záródirektíva egy-egy szekciót határoz meg. Általában a konfigurációs fájlban egy szekció egy webhelyet ír le.
Könyvtárra vonatkozó beállítások
<Directory /var/web/dir1> beállítások </Directory>
Melyik html fájlt szolgáljuk ki elsőnek
<Directory /var/web/dir1> DirectoryIndex elso.html </Directory>
Nem az index.html lesz az elsőként betöltött fájl! Helyette az elso.html állományt töltjük be.
Könyvtár listázása
<Directory /var/web/dir1> Options Indexes </Directory>
DirectoryIndex index.html beállítása mellett, ha nincs a könyvtárban index.html, akkor listázzuk a könyvtár tartalmát.
„+” és „-” karakterek használata
<Directory /var/web/dir1> Options +Indexes </Directory>
Vegyük észre a „+” karaktert! Ugyanaz mint ha nem lenne „+”, a beállítást engedélyezi.
<Directory /var/web/dir1> Options -Indexes </Directory>
Vegyük észre a „-” karaktert! Nem engedélyezzük a beállítást.
Hozzáférés IP alapján
<Directory /var/web/dir1> Order deny,allow Allow from 195.85.156.2 Deny from all </Directory>
Az „Order” utasítás megmondja milyen sorrendben értelmezzük az Allow és Deny beállításokat. A 195.85.156.2 IP-ről megnézhetik, mindenhonnan tiltunk mindent erre a könyvtárra.
Fájlokra vonatkozó beállítások
<Files private.html> Order allow,deny Allow from 192.168.5.4 </Files>
Ez a fájl csak a 192.168.5.4 címről érhető el.
Files direktíva Directoryba ágyazása
<Directory /var/web/dir1> <Files private.html> Order allow,deny Allow from 192.168.5.4 </Files> </Directory>
A dir1 könyvtáron belül csak a private.html fájlra vonatkozik a beállítás.
Webhely megadása
Egész hálózat engedélyezése:
<Location /private> Order Allow,Deny Allow from 192.168.5.0/24 </Location>
Reguláris kifejezések
A felhasználók saját könyvtára:
<Directory /home/*/public_html> Options Indexes </Directory>
Match = illeszkedés
Ha magas szintű reguláris kifejezésekkel akarunk illeszkedést meghatározni
<FilesMatch \.(gif|jpg|png)$> Order allow,deny Deny from all </FilesMatch>
A .gif .jpg és .png fájlok letöltése tilos
Alias
A host (site) dokumentumai a következő helyen találhatók:
/var/www
Tehetünk más helyre is megjelenítendő könyvtárakat. Például újabb könyvtárakat hozhatunk létre a következő helyen: /srv/www
Például legyen Ets nevű projekt amelyet az /srv könyvtárba szeretnénk tenni:
/srv/www/ets
Ahhoz, hogy a szerveren ip_cim/ets vagy domainnev/ets néven el tudjuk érni a /etc/apahe2/apache.conf állományban a következő beállításokra van szükség:
Alias /ets /srv/www/ets
Naplózási szint
LogLevel warn
A LogLevel kapcsolóval állítjuk be, például warn. Lehestésges értékek:
- debug
- info
- notice
- warn
- error
- crit
- alert
- emerg
Hova naplózzunk
Hibajelzések helyét az ErrorLog kapcsolóval állítjuk be:
ErrorLog /var/log/apache2/error.log
Ki fért hozzá valamelyik weblaphoz:
CustomLog /var/log/apache2/access.log combined
Naplózás figyelése
A 10 utolsó naplóbejegyzés megtekintése az access.log:
tail /var/log/apache2/access.log
A tail -f kapcsolója azt mondja, ha az apache ír az access.log fájlba, azonnal jelenítése meg számunkra:
tail -f /var/log/access.log
CGI engedélyezése
<Directory /usr/local/apache2/htdocs/somedir> Options +ExecCGI </Directory>
Ekkor a somedir könyvtárban tehetünk CGI scriptet
Milyen kiterjesztése lehet a cgi scripteknek
AddHandler cgi-script .cgi .pl
A .cgi és .pl kiterjesztések használhatók
Például a felhasználók a saját home könyvtárban futtathassanak .cgi könyvtárakat:
<Directory /home/*/public_html> Options +ExecCGI AddHandler cgi-script .cgi </Directory>
A felhasználók egy cgi-bin nevű könyvtárban használhatnak cgi scripteket:
<Directory /home/*/public_html/cgi-bin> Options ExecCGI SetHandler cgi-script </Directory>
Egy egyszerű „Helló Világ” típusú CGI:
#!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello Vilag";
Egy teljesebb ékezeteket is kezelő script:
#!/usr/bin/perl print "Content-type: text/html\n\n"; print <<"EOF"; <html> <head> <meta http-equiv="Content-type: text/html; charset=utf-8"> <title>Teszt</title> </head> <body> <h1>Helló Világ!</h1> </body> </html> EOF
PHP engedélyezése, beállítása
PHP engedélyezése:
a2enmod php5
Az index.php fusson le alapból:
<Directory /valahol/dir> DirectoryIndex index.php </Directory>
Apache azonosítás
Beállítások lehetnek központilag és helyileg egy könyvtárban.
Az apache decentralizált, helyi könyvtárban elhelyezett fájlban:
.htaccess
Centralizáltan:
httpd.conf
A központilag beállítva az adott könyvtárszekcióba szükség van az azonosításhoz a következő beállításra:
AllowOverride AuthConfig
Felhasználó és jelszófájl létrehozása
htpasswd -c /usr/local/apache/passwd/passwords jozsi
Ehhez hasonlót látunk:
New password: sajatjelszo Re-type new password: sajatjelszo Adding password for user jozsi
A -c kapcsoló létrehozza az állományt.
További felhasználók:
htpasswd /usr/local/apache/passwd/passwords mari
Vegyük észre! Már nincs -c kapcsoló!
A könyvtárszekcióba vagy .htaccess fájlba:
AuthType Basic AuthName "Azonosítás" Require valid-user AuthBasicProvider file AuthUserFile /usr/local/apache/passwd/passwords
Az AuthType megmondja az azonosítás típusát. Két gyakran használt érték: digest és a basic. A fenti példában Basic azonostást használunk. Az AuthName az azonosítást kérő ablak címkéjének feliratát határozza meg. A Require megmodja milyen felhasználót vagy csoportot követelünk meg. Ha az értéke valid-user akkor bármely felhasználó beléphet akinek van felhasználóneve jelszava beállítva. Lehet konkrét felhasználót is megadni. Például csak a jozsi nevű felhasználó léphessen be:
Require user jozsi
Csoportok alkalmazása
Csoportszintű szabályozához szükséges két sor a következő:
AuthGroupFile /usr/local/apache/passwd/groups Require group GroupName
Csoport fájl tartalma
általánosan:
csoportnev: csop1 csop2 csop3 csop4
konkrét példa:
human: jozsi mari kati szerelok: kati janos geza
Cím átírás - URL Rewriting
a2enmod rewrite
RewriteEngine on RewriteRule ^/$ /e/www/ [R]
A példában minden a webszerverre irányuló kérés át lesz irányítva a /e/www alkönyvtárba
Virtuális hostok
Adott egy gordon nevű gépünk, egy eros.hu domannel. Szerverünk ezen a két címen elérhető:
gordon.eros.hu eros.hu
Szeretnék mások is, ha az ő domainük a mi szerverünkön lenne tárolva, mert ők ezért nem szeretnének külön gépet fent tartani. Például János barátom meg kér, hogy a piros.hu domain is kezeljük neki. A mi gépünkön a piros.hu domain ekkor virtuális, azaz VirtulaHost lesz.
Tehát egy host kiszolgálhat olyan hostokat is ami mögött nincs külön számítógép. Ekkor virtuálishotról beszélünk.
Virtualhostok helye
/home/virtual-www
vagy
/data/virtual-www
esetleg
/home/vhosts
A virtualhostok beállításainak helye:
/etc/apach2/sites-available
Minden virtualhost egy állomány
Például a zold.hu virtuális domaint szeretnénk kiszolgálni, akkor a következő állományt késztjük el:
/etc/apache2/sites-available/piros.hu
Az állományban egy a következő elemeket írom:
<VirtualHost *:80> </VirtualHost>
Ezen két elem közzé kerülnek a virtualhost beállításai.
A szerver nevének beállítása:
ServerName piros.hu
Álnevek beállítása:
ServerAlias www.piros.hu red.hu
Figyeljük, meg, hogy az egyes állneveket szóközzel válasszuk el egymástól.
Dokumentumok helye:
DocumentRoot /home/virtual-www/piros.hu/docroot
Elsőnek betöltendő állomány:
DirectoryIndex index.html index.php
Naplózás:
ErrorLog /home/virtual-www/piros.hu/log/error.log CustomLog /home/virtual-www/piros.hu/log/access.log common
A második sor vége esetleg common helyett combined:
CustomLog /home/virtual-www/piros.hu/log/access.log combined
Például az awstat statisztikai program combined típusú naplófájlt igényel.
Ezek után a virtualhost teljes szekciója így nézhet ki:
<VirtualHost *:80> ServerName piros.hu ServerAlias www.piros.hu red.hu DocumentRoot /home/virtual-www/piros.hu/docroot DirectoryIndex index.html index.php ErrorLog /home/virtual-www/piros.hu/log/error.log CustomLog /home/virtual-www/piros.hu/log/access.log combined </VirtualHost> </apache> Ha a virtualhostnak könyvtárra vonatkozó beállításokat szeretnénk, akkor a VirtualHost elemek között megtehetjük. Például: <code apache> <VirtualHost *:80> ServerName piros.hu ServerAlias www.piros.hu red.hu DocumentRoot /home/virtual-www/piros.hu/docroot DirectoryIndex index.html index.php ErrorLog /home/virtual-www/piros.hu/log/error.log CustomLog /home/virtual-www/piros.hu/log/access.log combined <Directory /home/virtual-www/piros.hu/docroot/titkos> AllowOverride AuthConfig Order Deny, Allow Allow from 192.168.3.0/24 Deny From all </Directory> </VirtualHost>
MySQL
A webmesterek sokszor szeretnének a MySQL hozzáférést a szerveren. Ekkor létre kell hozni egy felhasználót, amely a jogosult az adott adatbázis létrehozására:
GRANT ALL PRIVILEGES ON databasenev.* TO 'valaki'@'localhost' IDENTIFIED BY 'titkosjelszo';
Példuául
GRANT ALL PRIVILEGES ON adozas.* TO 'ado'@'localhost' IDENTIFIED BY 'titkosjelszo';
A jogok érvénybeléptetéséhez futtassuk a flush privileges parancsot:
FLUSH PRIVILEGES;
Statisztika webszerverhasználatról
.htaccess
- .htaccess
Options +Indexes DirectoryIndex start.html