< Web

Apache webszerver

Szerző: Sallai András

Copyright © 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:

<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

http://w3techs.com/technologies/overview/web_server/all

http://news.netcraft.com/archives/category/web-server-survey/