[[oktatas:linux:webszerver|< Webszerver]] ====== Apache ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2009, 2011, 2013, 2014, 2015, 2018 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== A webszerverről ===== A webszerver HTML oldalakat szolgál ki http protokollon keresztül. Alapértelmezetten a 80-as porton. Titkosított adatátvitelre is képes SSL vagy TLS felett, a 443-as porton (https protokoll). Az Apache weboldala http://apache.org. Az Apache valójában egy alapítvány, amelynek nagyon sok projektje van. A webszerver (httpd) csak az egyik projekt a sok közül. A webszervert a főoldalról kiindulva a következő útvonalon lehet megtalálni: Project -> Project Listing -> Apache HTTP Server Persze egyszerűen azt is írhatjuk: * http://httpd.apache.org A Debian GNU/Linux 6.x verzión, az apache2 csomagban a 2.2 verziójú apache található. Ennek dokumentációja: * http://httpd.apache.org/docs/2.2/ ===== Telepítés ===== apt install apache2 Az apache weboldaláról letölthető a legújabb verzió is. 2012. májusban ez a 2.4-es verzió. ===== A telepítés ellenőrzése ===== Az apache két proton szokott webhelyeket szolgáltatni, a 80-as és a 443-as porton. Alapértelmezetten csak a 80-as port használható. Ellenőrizzük, hogy figyel-e a 80-as porton a telepített apache2: ss -lt A kimenet ehhez hasonló lehet: State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:ssh *:* LISTEN 0 128 :::http :::* LISTEN 0 128 :::ssh :::* A kettő darab kettőspontból láthatjuk, hogy az apache2 csak a IPv6 foglalaton figyel. (A harmadik kettőspont csak szeparátor) Ennek ellenére működik IPv4-en is, mivel az IPv4 az IPv6 foglalaton is képes fogadni a kapcsolatokat. Ehhez a Debian készítői az apache2 fordítását a következő kapcsolóval végezték: --enable-v4-mapped Hogy valóban, így van-e, kérdezzük le az apache-ot, milyen kapcsolókkal fordították: apache2ctl -V A következő sornak kell szerepelnie: ... -D ARP_HAVE_IPV6 (IPv4-mapped addresses enabled) ... ===== A weblapok helye ===== Alapértelmezetten a weblapok helye a következő. /var/www/html Ez persze megváltoztatható. ===== Vezérlés ===== ==== Vezérlés systemd-ből ==== systemctl stop apache2 systemctl start apache2 systemctl restart apache2 systemctl reload apache2 ==== apache2ctl ==== Az apache az apache2ctl paranccsal is vezérelhető. A következő parancsok adhatok: * start * stop * restart * fullstatus * status * graceful * graceful-stop * configtest Például az apache indítása: apache2ctl start Például az apache leállítása: apache2ctl stop A graceful parancs a SIGUSR1 jelzést küldi az apache-nak. Ennek hatására, ha az apache nem volt elindítva, akkor elindul. Ha el volt indítva, akkor nem szakítja meg a meglévő kapcsolatokat. Ha leállítjuk a graceful-stop paranccsal az sem szakítja meg a kapcsolatokat. ==== a2enmod, a2dismod ==== A modulok engedélyezése, tiltása. Használata: Engedélyezés: a2enmod modulnév Engedélyezésre példa: a2enmod php5 Tiltás: a2dismod mdoulnév Milyen modulok engedélyezhetők? Nézzük meg a mods-available könyvtár tartalmát: ls /etc/apache2/mods-available ==== a2ensite, a2dissite ==== Site vagy virtualhost engedélyezése, tiltása a2ensite [site] a2dissite [site] Például az alapértelmezett site leállítása: a2dissite default Milyen sit-ok engedélyezhetők? Nézzük meg a sites-available könyvtár tartalmát: ls /etc/apache2/sites-available Milyen sit-ok vannak engedélyezve? Nézzük meg a sites-enabled könyvtár tartalmát: ls /etc/apache2/sites-enabled ==== Állapot lekérdezése ==== /etc/init.d/apache2 status Apache2 is running (pid 3064). Ha a webszerver nem fut, akkor csak visszakapjuk a promptot. Több információt kaphatunk az apache2ctl parancs segítségével: apache2ctl status apache2ctl fullstatus ===== Beállítás ===== A konfigurációs állományok szimpla szöveges fájlok (plain text). A fő konfigurációs fájl a httpd.conf, amelynek a helye fordítási időben van beállítva. A "-f" kapcsolóval az "apache2" programnak más konfigurációs fájlok is megadhatók. Változtatás után az apache újratöltése vagy újraindítása előtt ellenőrizzük a konfigurációs fájl szintaktikáját: apache2ctl configtest Egy konfigurációs fájlhoz újabb konfigurációs fájlok illeszthetők az "Include" kulcsszóval. A konfigurációs mondatok nem case sensitvek. A nagy- és kisbetűk használata csak az átláthatóságot szolgálják. A konfiguráció minden módosítása után újra kell töltetni azokat az Apache webszerverrel a következő paranccsal: service apache2 reload Telepítés után a beállítások a következő helyen találhatók: /etc/apache2/ Ezen belül újabb könyvtárakat és állományokat találunk: * **conf-available** * Ebben a könyvtárban elhelyezett állományok konfigurációs fájlként beolvasásra kerülnek. * **conf-enabled** * Ebben a könyvtárban az előző könyvtárból vannak szimbolikus linkek. * **mods-available** * Ebben a könyvtárban az engedélyezhető modulok konfigurációs állományi vannak. * **mods-enabled** * Eebben a könyvtárban az előző könyvtárból vannak szimbolikus linkek. * Ha itt megtalálható egy modulhoz egy szimbolikus link akkor az engedélyezve van. * **sites-available** * Hozzáférhető webhelyek beállításai * **sites-enabled** * Engedélyezett webhelyek (előző könyvtárból szimbolikus link) * **apache2.conf** * Általános beállítások * **envvars** * Környezeti változók * **httpd.conf** * Saját beállításink helye * **magic** * Kiterjesztések kezelése * **ports.conf** * Használt portok ===== Naplófájlok ===== A naplófájlok helye: /var/log/apache2 Háromféle naplófájl van: Hibanapló: /var/log/apache2/error.log Hozzáférési napló: /var/log/apach2/access.log ===== Gyakorlat ===== Válaszoljon a következő kérdésekre: - Hogyan telepítjük Debian GNU/Linuxon az Apache webszervert? - Debian GNU/Linuxon, Apache webszerver esetén hol van a weboldalak alapértelmezett helye? - Hogyan állíthatom le initscripttel az apache webszervert? - Hogyan tilthatom le a php5 modult? - Hogyan kérdezhetem le a webszerver állapotát? - Debian GNU/Linux alatt hol van az alapértelmezett konfigurációs fájl? - Hova kerülnek a naplófájlok? ===== Alapbeállítások ===== A Debian GNU/Linux rendszeren települő Apache2 azonnal használható. A naplóállományokban azonban hibaüzenet van, mert egy ikonfájlt vár, amelyet megjelenít a böngészők fülein, ha az adott weblaphoz nincs semmi megadva. Alapértelmezetten azt várja, hogy készítsünk egy 16x16-os ico kiterjesztésű képfájlt. Az ikonfájlt elkészíthetjük például a GIMP rajzoló, képszerkesztő programmal. Az elkészült ico kiterjesztésű fájlt a szerveren a következő helyre kell menteni, az alábbi néven: /var/www/favicon.ico Ha változtatunk az apache beállításain, akkor ellenőrizzük szintaktikailag: apachectl configtest ===== Beállítások alkalmazási köre ===== A beállításokat alkalmazhatjuk könyvtárakra: ... A beállításokat alkalmazhatjuk könyvtárakra, szabályos kifejezéseket is használva: ... A beállításokat alkalmazhatjuk fájlokra: ... A beállításokat alkalmazhatjuk fájlokra, szabályos kifejezéseket is használva: ... A beállításokat alkalmazhatjuk webhelyre: ... A beállításokat alkalmazhatjuk webhelyre, szabályos kifejezéseket is használva: ...... A beállításokat alkalmazhatjuk virtuális hostokra: ... ===== Modulok ===== Az apache moduláris felépítésű. Alapértelmezetten csak az alapfunkciók vannak telepítve. A modulok betöltésére példa: LoadModule php5_module /usr/lib/apache2/modules/libphp5.so Elsőként megadtunk egy utasítást, ez után egy modulnevet, a végén pedig a modul elérhetőségének útvonalát. Fentebb már láttuk, hogy a modulok kezelésére létezik két remek utasítás: * a2enmod * a2dismod Az engedélyezhető modulok megtekintése: ls /etc/apache2/mods-available A példakedvéért a PHP5 engedélyezése: a2enmod php5 Ellenőrzés: ls /etc/apache2/mods-enabled/php5.load ===== A core modul ===== ==== Options ==== Mindig alapból betöltődő modul. Lehetővé teszi az //Options// és az //AllowOverride// beállíátsokat Options kapcsoló1 kapcsoló2 Options ExecCGI FollowSymlinks Indexes SymlinksIfOwnerMatch * ExecCGI * CGI programok futtathatók * FollowSymlinks * Szimbolikus linkek követése * Location direktívában hatástalan * Indexes * Az autoindex modul használatát engedélyezi, vagy tiltja * SymlinksIfOwnerMatch * A webkiszolgáló követi a szimbolikus linkeket, ha tulajdonos azonos * Location direktívában nem használható === A "+" és "-" karakterek használata === A plusz karakterek engedélyeznek valamit, a mínusz karakterek tiltanak egy beállítást. Ezeket a karaktereket nem kötelező kitenni. Ha nem teszem ki a "+" vagy a "-" karaktert, az alapértelmezett a "+", vagyis engedélyezett. Options +Indexes Ennek megfelelően egy tiltás: Options -Indexes Természetesen ha nem írom oda az "Indexes" kapcsolót, akkor sem lesz engedélyezve. ==== AllowOverride ==== AllowOverride jog1 jog2 A könyvtárakban elhelyezett .htaccess fájlok mit írhatnak felül. * None * A .htaccess állomány semmit sem bírálhat felül * All * A .htaccess állomány minden felülbírálhat * Indexes * A könyvtárindexeléshez kapcsolódó vezérlések lehetősége (A Options Indexes nem tartozik ide! Az az Options-al kell állítani) * Limit * Szabályozható, melyik számítógépről érhető el (access modul) * FileInfo * Például: Rewrite engedélyezése. * Options * felülbírálhatja a biztonsági kapcsolókat ==== .htaccess használata ==== A beállítások két módon tehetők meg: * központi (centralizált) httpd.conf * helyi (decentralizált) .htaccess A .htaccess akkor használjuk, ha egy könyvtárnak a beállításait nem központilag akarjuk megoldani. Ez jellemzően akkor van, ha azt egy másik rendszergazdára, vagy a webmesterre bízzuk (továbbiakban a webmesterre fogok hivatkozni). A webmester létrehoz ezen a néven egy állományt az adott könyvtárban, amiben elhelyezi a beállításait. Hogy mi az amit beállíthat mi határozzuk meg az "AllowOverride" beállítással központilag. Ha virtuális domainről van szó, akkor szerkesszük a virtuális domain beállításait, ha saját domainünk akkor httpd.conf fájlt: Szerkesszük a httpd.conf állományt: mcedit /etc/apache2/http.conf Az engedélyezést (mint azt fentebb már csináltuk) Directory direktívák között használhatjuk, például: AllowOverride AuthConfig Az AuthConfig teszi lehetővé, hogy a webmester a .htaccess fájlban apache azonosítást állítson be. Álljon itt egy lista miket szoktunk engedélyezni: * None * All * AuthConfig * Indexes * Limit * Options Ha több lehetőséget szeretnénk megadni, azt írjuk szóközökkel tagolva egymás után: AllowOverride AuthConfig Options Limit === A .htaccess példa === A fájl az aktuális könyvtárra vonatkozik, így nem kell Directory direktíva: Options +Indexes ErrorDocument 403 /error.php ErrorDocument 404 /error.php ErrorDocument 500 /error.php ===== Apache azonosítás ===== Az apache képes weboldalak hozzáférését szabályozni azonosítással. Vagyis nem kell a webmesternek megírni az azonosítási eljárást valamilyen néven, mert az alapból a rendelkezésünkre áll. A következőkben az **auth_basic** modul használatával megnézzük hogyan állítsunk be egy azonosítást. ==== Jelszófájl létrehozása ==== Az első felhasználót így vesszük fel: htpasswd -c /etc/apache2/auth/pass joska A -c kapcsoló a jelszó fájl létrehozására ad utasítást. A futtatás eredménye: htpasswd -c /etc/apache2/auth/pass joska New password: titok Re-type new password: titok Adding password for user joska A következő felhasználónál már nem szükséges a -c kapcsoló: htpasswd /etc/apache2/auth/pass mari Ha használjuk mégis a -c kapcsolót, akkor felülírjuk a pass állományt tartalmát. ==== Beállítás ==== Az apache konfigurációs állományában be kell állítanunk az azonosítást: AuthType Basic AuthName "Vedett tartomany" AuthUserFile /etc/apache2/auth/pass Require valid-user ==== További lehetőségek ==== * Require valid-user * Require user userid [userid2] ... * Require group csoportnev [csportnev2] ... Ha csak mari felhasználó léphet be: Require user mari ==== Csoportfájl ==== A csoportfájl használatának lehetősége a 2.4 apache verzióban külön modulba került, ami alapértelmezetten Debian9-en nincs engedélyezve. Először engedélyezzük az authz_groupfile modult: a2enmod authz_groupfile Az apache konfigurációban meg kell adni a csoportfájl helyét: AuthGroupFile /etc/apache2/auth/groups A csoportfájl szintaxisa: csoportnev: nev1 nev2 nev3 Egy csoportfájl így nézhet ki: informatika: joska mari kati gazdasagi: tibi gabor lajos A példában két csoport van. Az informatika és a gazdasagi. Az informatika csoportba tartozik joska, mari és kati. A gazdasagi csoportba tartozik tibi, gabor és lajos. ==== Karakterkódolás ==== Az apache konfigurációs fájlok kódolása iso-8859-1. file -i /etc/apache2/apache2.conf Ezért ha itt kell létrehoznunk egy AuthName értéket, akkor az helytelenül jelenik meg a böngészőben. Az UTF-8 környezetben megírt szöveget vissza kell kódolnunk iso-8859-1-be. Kódoljuk át az utf-8 karaktert iso-8859-1-es karakterré: echo "ékezet" | iconv -f utf8 -t iso-8859-1//TRANSLIT A kimeneteben valami ilyesmit kell látnunk: �kezet ===== Gyakorlat ===== - Milyen hatókörökre készíthetünk beállításokat? - Hogyan engedélyezzük egy könyvtár listázását? - Milyen direktívákat használhatunk a különböző hatókörökre? - Hogyan állíthatom be mi legyen az alapértelmezetten kiszolgátl fájlnév? - Hogyan hozok létre egy jelszófájlt? - Milyen modul kell a basic azonsításhoz? - Mit jelent a Require valid-user? - Mit jelent az AuthName ".." értéke? - Hogyan adjuk meg a csoportfájl helyét? - Az AllowOverride beállítást, hol és miért alkalmazzuk? ===== Az authz_host modul ===== A authz_host modul a 2.0-ás apacheban még access modul néven szerepel! ==== Allow,Deny ==== Célja a hozzáférés szabályozása. Az Allow és a Deny direktívákkal szabályozhatjuk milyen hostról vagy IP címről érhetik el az egyes weboldalakat. Figyelem! A beállítások alapértelmezetten csak a /var/www/ könyvtárban működnek. Ha a rendszergazda egy új könyvtárat szeretne, például: /home/www, akkor vagy a /etc/apach2/apache2.conf fájlban, vagy az új könyvtárra hivatkozásnál be kell ezt állítani külön: Require all granted Allow from all Allow from piros.and Allow from 10.252.46.165 Deny from 10.252.46.165 Allow from 192.168.1.104 192.168.1.205 Minden számítógép számára: all Deny from all Allow from 192.168.5.0/255.255.255.0 Allow from 192.168.5.0/24 Allow from 10.1.0.0/255.255.0.0 Allow from 10.1.0.0/16 Allow from 2001:db8::a00:20ff:fea7:ccea Allow from 2001:db8::a00:20ff:fea7:ccea/10 ==== Order ==== Order sorrend === Szigorúbb === Alapértelmezés szerint mindenkinek tiltott az elérés. Order Allow,Deny Először megnézzük az Allow részt. Ha egyetlen Allow rész sem illeszkedik akkor tiltás. Másodszor megnézzük a Deny részt. Ha illeszkedik egy Deny-re akkor hiába volt engedélyezve, tiltva lesz. === Enyhébb === Alapértelmezés szerint minden ügyfél jöhet. Order Deny,Allow Először megnézzük a Deny részt. Ha nincs illeszkedés akkor elérhető a könyvtár. Másodszor megnézzük a Allow-ot. Ez felül írja a Deny részt is, ha meg volt tiltva, de most szerepel az Allow részben, akkor hozzáférhető. ==== Hozzférés példa ==== Order Allow,Deny Allow from piros.and Deny from sarga.and Order Deny,Allow Deny from 192.168.5.0/24 Allow from 192.168.5.3 A 192.168.5.0 hálózatból nem jöhet senki, csak a 192.168.5.3-as címről. ===== Webhelyek kezelése ===== A webhelyeket (sites) a következő két paranccsal kezelhetők: * a2ensite * a2dissite A webhelyek konfigurációs állományait az alábbi könyvtárban tartjuk: /etc/apache2/sites-available Mindig létezik egy alapértelmezett webhely "default" néven. /etc/apache2/sites-available/default ===== Konfigurációk kezelése ===== Konfigurációt egy-egy könyvtár számára szoktunk beállítani. Legyen például a **/home/janos/valami** könyvtár amit szeretnénk kiszolgálni. A /etc/apache2/conf-available/ könyvtárban hozzunk létre egy valami.conf nevű állományt a következő tartalommal: Options Indexes FollowSymLinks AllowOverride All Require all granted Engedélyezzük az konfigurációt: a2enconf valami Töltsük újra a szervert: systemctl restart apache2 ===== Virtualhost beállítása ===== ==== Minimum ==== Hozzunk létre például a piros.and domain számára egy állományt: mcedit /etc/apache2/sites-available/piros.and Minimális tartalma: ServerAdmin webmaster@piros.and ServerName piros.and ServerAlias www.piros.and DocumentRoot /home/virtual-web/piros.and/htdocs/ # Naplófájlok ErrorLog /home/virtual-web/piros.and/logs/error.log CustomLog /home/virtual-web/piros.and/logs/access.log combined Require all granted ServerAdmin webmaster@piros.and ServerName piros.and ServerAlias www.piros.and DirectoryIndex index.html DocumentRoot /home/virtual-web/piros.and/htdocs/ # CGI könyvtár ScriptAlias /cgi-bin/ /home/virtual-web/piros.and/cgi-bin/ Options +ExecCGI # Naplófájlok ErrorLog /home/virtual-web/piros.and/logs/error.log CustomLog /home/virtual-web/piros.and/logs/access.log combined Ez után töltsük újra a konfigurációt: /etc/init.d/apache2 reload Ellenőrizzük milyen hibák vannak: tail /var/log/apache2/error.log Engedélyezzük a domaint: a2ensite piros.and Ez után töltsük újra a konfigurációt: /etc/init.d/apache2 reload Ellenőrizzük a weblap elérhetőségét: lynx http://piros.and A website elérésével kapcsolatos hibák ez után itt: ErrorLog /home/virtual-web/piros.and/logs/error.log A weblapról elérési adatok: CustomLog /home/virtual-web/piros.and/logs/access.log combined ==== IP alapú virtualhost ==== ServerAdmin valaki@zold.and DocumentRoot /home/www/tanar Require all granted ServerAdmin valaki@zold.and DocumentRoot /home/www/diak Require all granted Engedélyezzük a beállítást: a2ensite systemctl restart apache2 ===== Ellenőrző eszközök ===== ==== Böngésző ==== apt-get install lynx A lynx egy karakteres böngésző. ==== Terhelés ==== apt-get install apachetop ===== MySQL azonosítás ===== apt-get install libapache2-mod-auth-mysql a2enmod auth_mysql mysql -u root -p grant all on auth.* to auth_user@localhost identified by 'titok'; create database auth; use auth; CREATE TABLE `clients` ( `username` varchar(30) NOT NULL default '', `passwd` varchar(25) NOT NULL default '', `groups` varchar(25) NOT NULL default '', PRIMARY KEY (`username`), KEY `groups` (`groups`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `clients` VALUES ('joska', 'titok', 'info'); mcedit /etc/apache2/httpd.conf Auth_MySQL_Info localhost auth_user titok AuthName "Azonositas" AuthType Basic AuthBasicAuthoritative off AuthMySQL On AuthMySQL_Authoritative on AuthMySQL_DB auth AuthMySQL_Password_Table clients AuthMySQL_Group_Table clients AuthMySQL_Empty_Passwords off AuthMySQL_Encryption_Types Plaintext Crypt_DES AuthMySQL_Username_Field username AuthMySQL_Password_Field passwd require valid-user ===== ASP ===== Néha a webmesterek ASP-t szeretnének futtatni a webszerverünkön. Ehhez Mono nevű csomag telepítésére van szükség: apt-get install libapache2-mod-mono ===== SSL ===== ==== SSL engedélyezése ==== SSL modul engedélyezése: a2enmod ssl # a2enmod ssl Considering dependency setenvif for ssl: Module setenvif already enabled Considering dependency mime for ssl: Module mime already enabled Considering dependency socache_shmcb for ssl: Enabling module socache_shmcb. Enabling module ssl. See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates. To activate the new configuration, you need to run: systemctl restart apache2 Az SSL site engedélyezése: a2ensite default-ssl # a2ensite default-ssl Enabling site default-ssl. To activate the new configuration, you need to run: systemctl reload apache2 ==== Tanúsítvány elkészítése ==== Csináljunk a tanúsítványoknak helyet: # mkdir /etc/apache2/ssl A tanúsítványok másik szokásos helye lehet: /etc/ssl/certs/ Tanúsítvány készítése: # openssl req -x509 -nodes \ -days 365 -newkey rsa:2048 \ -keyout /etc/apache2/ssl/apache.key \ -out /etc/apache2/ssl/apache.crt A futtatás eredménye, egy konkrét példán: # openssl req -x509 -nodes \ -days 365 -newkey rsa:2048 \ -keyout /etc/apache2/ssl/apache.key \ -out /etc/apache2/ssl/apache.crt Generating a 2048 bit RSA private key ..................+++ ........+++ writing new private key to '/etc/apache2/ssl/apache.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:HU State or Province Name (full name) [Some-State]:Hungary Locality Name (eg, city) []:Budapest Organization Name (eg, company) [Internet Widgits Pty Ltd]:ZoldRt Organizational Unit Name (eg, section) []:Informatika Common Name (e.g. server FQDN or YOUR name) []:zold.and Email Address []:admin@zold.and A kapcsolók rendre: * -x509 -- A tanúsítvány típusa * -nodes -- A titkos kulcs ne legyen DES algoritmussal titkosítva. * Ha elhagyjuk, akkor 3DES-CBC-el titkosítva lesz kulcs és a jelszót pedig bekéri. * Ha le lenne titkosítva, meg kellene adni szerver indulásakor a jelszót. * -days 365 -- Egy évig legyen érvényes a tanúsítvány * -newkey rsa:2048 -- A kulcs RSA algoritmussal készüljön, legyen 2048 bites * -keyout /etc/apache2/ssl/apache.key -- a titkos kulcs helye és neve * -out /etc/apache2/ssl/apache.crt -- a tanúsítvány helye és neve Kulcsok védelme: # chmod 600 /etc/apache2/ssl/* ==== Kulcsok beállítása az apache-ban ==== Kulcsok beállítása az apache-ban. nano /etc/apache2/sites-available/default-ssl.conf Tartalmában javítjuk: [...] SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key [...] ==== Végül ==== Apache újraindítása: systemctl restart apache2 Ellenőrzés: https://zold.and ===== Rewrite ===== ==== A rewritingról ==== Egy címet, útvonalat újraírhatunk segítségével. Felhasználásának számtalan módja lehet, mi most csak egy egyszerű http https átirányítást fogunk megnézni a példa kedvéért. ==== A rewrite modul engedélyezése ==== a2enmod rewrite systemctl restart apache2 ==== Átirányítás ==== Először engedélyezzük az átírást: RewriteEngine On Ellenőrizzük, hogy nincs HTTPS kapcsolat: RewriteCond %{HTTPS} !=on Ezek után a kérést átirányítjuk ugyanarra a címre, de https protokollal. RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] Például: http://zold.and -> https://zold.and A beállításoknak két helye legyen: * httpd.conf * .htaccess A .htaccess fájlban való használathoz be kell állítani a httpd.conf fájlban a következő tulajdonságot: AllowOverride Esetleg az alábbi sor helyettesíthető: RewriteCond %{HTTPS} !=on ezzel: RewriteCond %{HTTPS} off ==== Könyvtár megadása ==== A következő sorokat tegyük a .htaccess fájlba. RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/?secure/(.*) https://%{SERVER_NAME}/secure/$1 [R,L] Például: http://zold.and/titkos/ -> https://zold.and/titkos/ ==== Favicon példa ==== # REDIRECT FAVICON REQUESTS RewriteEngine on RewriteCond %{REQUEST_URI} !^/favicon\.ico [NC] RewriteCond %{REQUEST_URI} favicon\.ico [NC] RewriteRule (.*) http://domain.tld/favicon.ico [R=301,L] ===== Átirányítás ===== Minden hivatkozást átirányítunk egy másik címre. Lehet /etc/apache2/httpd.conf, vagy egy helyi .htaccess fájlban. Lehet Directory direktíva között: RedirectMatch permanent ^(.*)$ http://masikdomain.valahol Lehet Location direktíva között: RedirectMatch permanent ^(.*)$ http://masikdomain.valahol A következő példában ha a blog könyvtár vagy annak egy alkönyvtárrára hivatkozik valaki, akkor átirányítás történik: RedirectMatch 301 ^/blog/.*$ http://domain.tld/target.html Ha csak a blog könyvtárra szeretnénk: RedirectMatch 301 ^/blog/$ http://domain.tld/target.html Esetleg csak domainnel: RedirectMatch 301 ^/blog/$ http://domain.tld/ Más variációk, amelyekben benne van az ideiglenes (302) és a tartós (301) átirányítás: # Tartós átirányítás RedirectMatch 301 ^/blog/.*$ http://domain.tld/target.html # Ideiglenes átirányitás: RedirectMatch 302 ^/blog/.*$ http://domain.tld/target.html Ilyeneket is írhatunk: # Állandó átirányítás: RedirectMatch permanent ^/blog/.*$ http://domain.tld/target.html # Ideigelnes átirányítás: RedirectMatch temp ^/blog/.*$ http://domain.tld/target.html ===== Port és IP cím ===== Az /etc/apache2/ports.conf állományban alapértelmezetten be van állítva a 80-as port használatra. Ebben az állományban megadhatunk más portokat is a "Listen" direktívával. Listen 80 A Listen direktíva többször is használható, megadhatunk újabb portokat is: Listen 80 Listen 8000 Egyszerre megadható IP cím is: Listen 192.168.1.1:80 Megahdató IPv6-os cím is: Listen 2001:db8:: Minden IP címen figyelünk: Listen 0:0:0:0:80 ===== CGI ===== CGI futtatható a könyvtárból. Options +ExecCGI CGI scriptek kiterjesztésének megadása: AddHandler cgi-script .cgi .pl A .cgi és a .pl kiterjesztéseket szeretnénk használni. Options +ExecCGI AddHandler cgi-script .cgi Options +ExecCGI SetHandler cgi-script Egy CGI program: #!/usr/bin/perl print "Content-type: text/html\n\n"; print "Helló Világ"; ===== Ellenőrzés ===== apt-get install apache2-utils ab http://domainnev.hu/konyvtar Sebesség teszt. Csak domainre nem működik, alkönyvtárra használjuk. ===== Userdir ===== A felhasználóknak szeretnénk lehetővé tenni, hogy saját weblapjaikat a public_html könyvtárban elhelyezhessék, azokra így hivatkozhassanak a böngészőben: http://domainnev/~felhasznalonev/ Ehhez engedélyeznünk kell a userdir modult: a2enmod userdir service apache2 restart Ha PHP is szeretnénk nekik engedélyezni, akkor: mcedit /etc/apache2/mods-available/php5.conf Megkeressük a következő részt: php_admin_value engine Off A php_admin_flag engine On sort be kell szúrni. php_admin_value engine Off php_admin_flag engine On Biztonsági okokból, konkrétan, hogy egyik felhasználó ne lásson a másik könyvtárába, a joska felhasználónak lehet be van állítva a következő: chmod o-x /home/joska Ebben az esetben nem fog működni a böngészőben a http://servernev/~joska/ Sajnos engedélyezni kell: chmod o+x /home/joska ===== PHP modulok ===== # apt install php7.0 php7.0-mysql php7.0-xml ===== PHP kezelése ===== Telepítése után nem minden modul kerül engedélyezésre. PHP modulok engedélyezése: php5enmod imap service apache2 restart Modulok megtekintése: php -m ===== Teljesítmnyteszt ===== Az ab parancs az apache2-utils csomag része. Az ab parancs segítségével teljesítményteszteket végezhetünk a webszerverünkön: ab -n 1000 -c 100 http://localhost/ | -n | a kérések száma | | -c | a konkurens kérések száma | ===== Konfig ===== Options Indexes FollowSymLinks AllowOverride All Require all granted sudo service apache2 restart ===== Feladatok ===== ==== Feladat 001 ==== Készítse el a következő könyvtárat: /var/www/szamvitel Állítsa be a következőket: * nem indexelhető * könyvtárlista látszik * kezdőlap: elso.html ==== Feladat 002 ==== Készítse el a következő könyvtárat: /var/www/info Állítsa be a következőket: * indexelhető * könyvtárlista látszik * kezdőlap nincs Hozza létre a következő két állományt: * jelszo.html * telepites.html ==== Feladat 003 ==== Készítse el a következő könyvtárat: /usr/local/ets Hozza létre a következő tartalmú állományt: Hozzon létre Aliast a könyvtárra. ==== Feladat 004 ==== Készítse el a következő könyvtárat: /var/www/raktar Állítsa be a következőket: * legyen listázható * kiinduló állomány: kezdes.html * Hozza létre még a következő két állományt * torzs.html * selejt.html ==== Feladat 005 ==== Készítse el a következő könyvtárat: /var/www/kommunikacio Állítsa be a következőket: * ne legyen listázható * kiindulási állomány: index.html ==== Feladat 006 ==== * Tartomány A 192.168.8. * Tartomány B 192.168.5. ==== Feladat 101 ==== Vegyen fel egy új Virtualhostot: lila.org Dokumentumroot: /home/virtual-www/lila.org/htdocs Naplózás: /home/virtual-www/lila.org/ Alias: * www.lila.org * w3.lila.org * kekespiros.org /etc/hosts ==== Feladat 102 ==== Vegyen fel egy új Virtualhostot: gomb.hu Docroot: /home/virtual-www/gomb.hu/www Naplózás: /home/virtual-www/gomb.hu/ Alias: * www * kis * nagy * perem Azonosítás: /home/virtual-www/gomb.hu/www/vedett A következő felhasználók legyenek: * tamas * lori * peti Jelszó fájl: /home/virtual-www/gomb.hu/jelszo ==== Feladat 103 ==== Vegyen fel egy új Virtualhostot: pater.hu DocRoot: /home/vhosts/pater.hu/www/ Naplózás: /home/vhosts/pater.hu/error.log /home/vhosts/pater.hu/access.log Alias: * www.pater.hu * arend.pater.hu Állítsa be a következőket: /home/vhosts/pater.hu/www/novicius * A "rend" nevű csoport csak olvashatja * A "novicius" csoport csak azonosítással olvashatja Csoportok: * rend tagjai * apat * peter * tibor * elemer tagjai: * izsak * feri ==== Feladat 104 ==== Vegyen fel egy új Virtualhostot: pirosszolo.hu DocRoot: /home/vhosts/pirosszolo.hu/public_html Naplózás: /home/vhosts/pirosszolo.hu/ Alias: * redszolo.hu * www.redszolo.hu * www.pirosszolo.hu A következő könyvtárszerkezetet alakítsa ki: ../public_html |-- html |-- arak |-- bevetel Azonosításhoz csoportok: * Csoportok * ugyfel * mankft * jozsibt * vker * borasz * juli * mari * tercsi ===== Irodalom ===== ==== Könyv ==== * Daniel Lopez: Apache zsebkönyv * ISBN: 9789639637320 * Ken Coar, Rich Bowen: Apache receptek * Megoldások és példák Apache-rendszergazdáknak * ISBN: 9789639637481 * Ben Laurie, Peter Laurie: Apache * ISBN: 963-09-4265-8 ==== Linkek ==== * http://httpd.apache.org/docs/2.2/howto/auth.html * http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html * http://www.howtoforge.com/mod_auth_mysql_apache2_debian * http://modauthmysql.sourceforge.net/CONFIGURE * http://www.akadia.com/services/ssh_test_certificate.html (SSL) * http://www.netlock.net/docs/segedletek/szerver_apache_tanusitvanyigenyles_sha256.pdf (Tanúsítvány igénylése) * https://httpd.apache.org/docs/2.4/bind.html (2018) SSL: * https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-debian-8 (2018) * https://wiki.debian.org/Self-Signed_Certificate (2018)