[[: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