[[:oktatas:web|< Web]]
====== Apache webszerver ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2011, 2012, 2014, 2019
* Licenc: GNU Free Documentation License 1.3
* Web: http://szit.hu
===== Apache beszerzése =====
* http://httpd.apache.org (2019)
* https://www.apachefriends.org/ (2019)
Telepítés Debian GNU/Linux saját csomagjaiból:
apt install apache2
===== 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:
*
*
*
*
*
*
*
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:
...
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 ====
beállítások
==== Melyik html fájlt szolgáljuk ki elsőnek ====
DirectoryIndex elso.html
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 ====
Options Indexes
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 ====
Options +Indexes
Vegyük észre a „+” karaktert! Ugyanaz mint ha nem lenne „+”,
a beállítást engedélyezi.
Options -Indexes
Vegyük észre a „-” karaktert! Nem engedélyezzük a beállítást.
==== Hozzáférés IP alapján ====
Order deny,allow
Allow from 195.85.156.2
Deny from all
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 ====
Order allow,deny
Allow from 192.168.5.4
Ez a fájl csak a 192.168.5.4 címről érhető el.
==== Files direktíva Directoryba ágyazása ====
Order allow,deny
Allow from 192.168.5.4
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:
Order Allow,Deny
Allow from 192.168.5.0/24
==== Reguláris kifejezések ====
A felhasználók saját könyvtára:
Options Indexes
Match = illeszkedés
Ha magas szintű reguláris kifejezésekkel akarunk illeszkedést meghatározni
Order allow,deny
Deny from all
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 ====
Options +ExecCGI
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:
Options +ExecCGI
AddHandler cgi-script .cgi
A felhasználók egy cgi-bin nevű könyvtárban használhatnak cgi scripteket:
Options ExecCGI
SetHandler cgi-script
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";
Teszt
Helló Világ!
EOF
==== PHP engedélyezése, beállítása ====
PHP engedélyezése:
a2enmod php5
Az index.php fusson le alapból:
DirectoryIndex index.php
==== 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:
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:
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
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:
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
AllowOverride AuthConfig
Order Deny, Allow
Allow from 192.168.3.0/24
Deny From all
===== 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 =====
* http://w3techs.com/technologies/overview/web_server/all
* http://news.netcraft.com/archives/category/web-server-survey/
===== .htaccess =====
Options +Indexes
DirectoryIndex start.html