HTTPD – Apache2 webkiszolgáló

Az Apache a Linux rendszereken legszélesebb körben használt webkiszolgáló. A webkiszolgálók a kliensszámítógépek által kért weboldalak kiszolgálását végzik. A kliensek általában webböngésző alkalmazások, mint például a Firefox, Opera, vagy Mozilla használatával kérik le és jelenítik meg a weboldalakat.

A felhasználók az URL megadásával irányíthatják a böngészőt a webkiszolgálóra, a teljes képzésű tartománynév (FQDN) és a kért erőforrás útvonalának segítségével. Az Ubuntu weboldalának megnyitásához a felhasználónak csak az FQDN-t kell megadnia. A kereskedelmi támogatással kapcsolatos információk megjelenítéséhez a felhasználónak az FQDN mellett egy útvonalat is meg kell adnia.

A weboldalak átvitelére használt legáltalánosabb protokoll a HTTP. Ezen kívül további protokollok is támogatottak, például a HTTPS és az FTP.

Az Apache webkiszolgálót gyakran a MySQL adatbázismotorral, a PHP parancsnyelvvel és más népszerű parancsnyelvekkel, mint a Python és Perl együtt használják. Ezt az összeállítást LAMP-nak (Linux, Apache, MySQL és Perl/Python/PHP) nevezik, és hatékony és megbízható környezetet biztosít webalkalmazások fejlesztéséhez és telepítéséhez.

Telepítés

Az Apache2 webkiszolgáló elérhető Ubuntu Linux alatt. Az Apache2 telepítéséhez:

  • A terminálban adja ki a következő parancsot:

    sudo apt-get install apache2
    

Beállítás

Az Apache2 beállítása egyszerű szöveges beállítófájlokban elhelyezett direktívákkal történik. A beállítások a következő fájlokba és könyvtárakba vannak szétosztva:

  • apache2.conf: az elsődleges Apache2 beállítófájl. Az Apache2 globális beállításait tartalmazza.

  • conf.d: az Apache2-re globálisan érvényes beállítófájlokat tartalmazza. Az Apache2-t tartalom kiszolgálására használó egyéb csomagok ebbe a könyvtárba fájlokat vagy szimbolikus linkeket helyezhetnek el.

  • envvars: az Apache2 környezeti változói ebben a fájlban kerülnek beállításra.

  • httpd.conf: történetileg az elsődleges Apache2 beállítófájl, amelyet a httpd démonról neveztek el. Ez a fájl felhasználóspecifikus beállításokat tartalmazhat, amelyek globálisan befolyásolják az Apache2-t.

  • mods-available: ez a könyvtár a modulok betöltésére és beállítására szolgáló beállítófájlokat tartalmaz. Nem minden modulhoz tartoznak beállítófájlok.

  • mods-enabled: szimbolikus linkeket tartalmaz az /etc/apache2/mods-available fájljaira. A modul beállítófájljára mutató szimbolikus link létrehozása után az adott modul bekapcsolásra kerül az apache2 következő újraindításakor.

  • ports.conf: az Apache2 által figyelt TCP portokat meghatározó direktívákat tartalmazza.

  • sites-available: ez a könyvtár az Apache2 virtuális kiszolgálóinak beállítófájljait tartalmazza. A virtuális kiszolgálók lehetővé teszik az Apache2 beállítását több, eltérő beállításokkal rendelkező webhely kiszolgálására.

  • sites-enabled: a mods-enabled mintájára a sites-enabled szimbolikus linkeket tartalmaz az /etc/apache2/sites-available könyvtárra. Miután a sites-available egyik fájljára létrejön a szimbolikus link, az Apache2 újraindítása után az adott webhely engedélyezésre kerül.

Ezeken kívül további beállítófájlok is felvehetők az Include direktíva használatával, ebben helyettesítő karakterek is használhatók több beállítófájl felvételére. A beállítófájlok bármelyikébe bármely direktíva elhelyezhető. Az elsődleges beállítófájl módosításai csak az Apache2 elindításakor vagy újraindításakor lépnek életbe.

A kiszolgáló beolvassa a MIME-dokumentumtípusokat tartalmazó fájlt is, ennek nevét a TypesConfig direktíva adja meg és alapértelmezésben az /etc/mime.types.

Alapbeállítások

Ez a szakasz ismerteti az Apache2 kiszolgáló alapvető beállítási lehetőségeit. További részletekért lásd az Apache2 dokumentációját.

  • Az Apache2 virtuális kiszolgálókra szabott alapértelmezett beállításokat tartalmaz. Ez azt jelenti, hogy egyetlen alapértelmezett virtuális kiszolgálóval van beállítva (a VirtualHost direktíva használatával). Ez módosítva vagy változatlanul hagyva is használható egyetlen oldal kiszolgálására, vagy ha több webhelye van, akkor használható további virtuális kiszolgálók sablonjaként. Ha nem módosítja, akkor az alapértelmezett virtuális kiszolgáló fog alapértelmezett webhelyként szolgálni, illetve a webhely felhasználói azt fogják látni, hogy az általuk megadott URL nem illeszkedik egyik webhely ServerName direktívájára sem. Az alapértelmezett virtuális kiszolgáló módosításához szerkessze az /etc/apache2/sites-available/default fájlt.

    [Megjegyzés]

    Egy adott virtuális kiszolgálóra beállított direktívák csak az adott virtuális kiszolgálóra érvényesek. Ha egy direktíva meg van adva kiszolgálószinten, de a virtuális kiszolgáló beállításai közt nincs, akkor az alapértelmezett beállítás kerül felhasználásra. Megadhat például egy webmesteri e-mail címet, ekkor elhagyhatja ennek megadását az egyes virtuális kiszolgálókhoz.

    Ha új virtuális kiszolgálót vagy webhelyet szeretne beállítani, másolja ezt a fájlt ugyanebbe a könyvtárba tetszőleges néven. Például:

    sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/újoldal
    

    Szerkessze az új fájlt az új webhely beállításához az alább leírt direktívák segítségével.

  • A ServerAdmin direktíva megadja a kiszolgáló rendszergazdájaként közzétenni kívánt e-mail címet. Az alapértelmezett érték a webmaster@localhost. Ezt egy Önnek kézbesített e-mail címre kell cserélnie (ha Ön a kiszolgáló rendszergazdája). Ha a weboldalon probléma lép fel, az Apache2 megjelenít egy hibaüzenetet, amely ezt a címet adja meg a hiba bejelentéséhez. Ez a direktíva az /etc/apache2/sites-available alatti beállítófájljában található meg.

  • A Listen direktíva megadja azt a portot és opcionálisan IP-címet, amelyen az Apache2-nek figyelnie kell a kéréseket. Ha az IP-cím nincs megadva, akkor az Apache2 a géphez rendelt minden IP-címen figyelni fog. A Listen direktíva alapértelmezett értéke a 80. Ha ezt 127.0.0.1:80 értékre állítja, az Apache2 csak a visszacsatolási felületen fog figyelni, és nem lesz elérhető az interneten, vagy 81-re állítva a figyelt port módosítható, vagy a normál működéshez hagyja változatlanul. Ez a direktíva az /etc/apache2/ports.conf fájlban található.

  • A ServerName direktíva elhagyható és megadja, hogy a webhely mely FQDN-re válaszoljon. Az alapértelmezett virtuális kiszolgálóhoz nincs megadva a ServerName direktíva, így minden kérésre válaszol, amely nem illeszkedik egy másik virtuális kiszolgálón beállított ServerName direktívára. Ha például most szerezte meg az ubunturocks.com tartománynevet, és az Ubuntu kiszolgálóján szeretné üzemeltetni, akkor a ServerName direktíva értékének a virtuális kiszolgáló beállítófájljában ubunturocks.com kell lennie. Vegye fel ezt a direktívát a korábban létrehozott virtuális kiszolgáló beállítófájljába (/etc/apache2/sites-available/újoldal).

    Hasznos lehet úgy beállítani az oldalt, hogy a www.ubunturocks.com névre is válaszoljon, mivel sok felhasználó feltételezi, hogy a www előtag szükséges. Erre a célra a ServerAlias direktíva használható. A ServerAlias direktívában helyettesítő karaktereket is használhat.

    A következő beállítás hatására például a webhely minden .ubunturocks.com végű tartománykérésre válaszolni fog.

    ServerAlias *.ubunturocks.com
    
  • A DocumentRoot direktíva megadja, hogy az Apache2 hol keresse a webhelyet felépítő fájlokat. Az alapértelmezett érték a /var/www. Itt nincs beállítva semmilyen webhely, de az /etc/apache2/apache2.conf fájl RedirectMatch direktívájának engedélyezésével a kérések át lesznek irányítva a /var/www/apache2-default helyre, ahol az alapértelmezett Apache2 webhely várja. Módosítsa ezt az értéket a webhely virtuális kiszolgálójának beállítófájljában, és ha még nem létezik, hozza létre azt a könyvtárat.

Az /etc/apache2/sites-available könyvtárat nem dolgozza fel az Apache2. Az /etc/apache2/sites-enabled alatti szimbolikus linkek mutatnak az „elérhető” oldalakra.

Engedélyezze az új VirtualHostot az a2ensite segédprogram használatával, és indítsa újra az Apache2-t:

sudo a2ensite újoldal
sudo /etc/init.d/apache2 restart
[Megjegyzés]

Ne felejtsen el az újoldal helyett beszédesebb nevet adni a VirtualHostnak. Ennek egy módja, hogy a fájlt a virtuális kiszolgáló ServerName direktívája alapján nevezi el.

Hasonlóképpen az a2dissite segédprogrammal tilthatja le a webhelyeket. Ez a több virtuális kiszolgálót érintő beállítási hibák elhárításakor lehet hasznos.

sudo a2dissite újoldal
sudo /etc/init.d/apache2 restart

Alapértelmezett beállítások

Ez a szakasz ismerteti az Apache2 kiszolgáló alapértelmezett beállításait. Virtuális kiszolgáló felvételekor például az ahhoz megadott beállítások élveznek elsőbbséget. A virtuális kiszolgáló beállításaiban meg nem adott direktívák esetén az alapértelmezett értékek kerülnek felhasználásra.

  • A DirectoryIndex direktíva jelöli a kiszolgáló által alapértelmezésben kiszolgált oldalt, amikor a felhasználó a könyvtár indexét kéri le a könyvtárnév végén megadott / jellel.

    Ha például a felhasználó lekéri a http://www.példa.hu/példa_könyvtár/ címet, akkor vagy a DirectoryIndex oldalt kapja (ha az létezik), vagy ha meg van adva az Indexes beállítás, akkor a kiszolgáló által generált könyvtártartalmat, egyébként pedig a „hozzáférés megtagadva” oldalt. A kiszolgáló megpróbálja megkeresni a DirectoryIndex direktívában megadott fájlokat, és visszaadja az elsőként megtaláltat. Ha nem találja egyiket sem, és a könyvtárhoz meg van adva az Options Indexes direktíva, akkor a kiszolgáló HTML formátumba előállítja és visszaadja a könyvtár által tartalmazott könyvtárak és fájlok listáját. Az /etc/apache2/mods-available/dir.conf fájlban található alapértelmezett érték az „index.html index.cgi index.pl index.php index.xhtml index.htm”. Ha az Apache2 a lekért könyvtárban talál ilyen nevű fájlokat, akkor megjeleníti az elsőt.

  • Az ErrorDocument direktíva lehetővé teszi az Apache2-nek adott hibaesemények ellenőrzését. Ha például a felhasználó nem létező erőforrást kér, 404-es hiba történik, és az Apache2 alapértelmezett beállításai szerint a /usr/share/apache2/error/HTTP_NOT_FOUND.html.var fájl jelenik meg. Ez a fájl nincs a kiszolgáló DocumentRoot-jában, de egy Alias direktíva az /etc/apache2/apache2.conf fájlban átirányítja az /error könyvtárra vonatkozó kéréseket a /usr/share/apache2/error/ könyvtárba.

    Az alapértelmezett ErrorDocument direktívák listájának megjelenítéséhez adja ki a következő parancsot:

    grep ErrorDocument /etc/apache2/apache2.conf
    
  • Alapértelmezésben a kiszolgáló az átviteli naplót a /var/log/apache2/access.log fájlba írja. Ezt webhelyenként megváltoztathatja a virtuális kiszolgáló beállítófájljaiban a CustomLog direktíva segítségével, vagy az /etc/apache2/apache2.conf fájlban megadott alapértelmezett használatához ki is hagyhatja. Az ErrorLog direktíva használatával megadhatja azt a fájlt, amelybe a hibák naplózásra kerülnek, az alapértelmezett érték a /var/log/apache2/error.log. Ezek az Apache2 kiszolgálóval kapcsolatos hibák elhárításának megkönnyítése érdekében az átviteli naplóktól külön tárolódnak. Megadhatja a LogLevel (az alapértelmezett érték a „warn”) és a LogFormat (az alapértelmezett érték az /etc/apache2/apache2.conf fájlban található) direktívákat is.

  • Egyes beállítások a könyvtárak és nem a kiszolgálók szintjén adhatók meg. Az egyik ilyen direktíva az Options. A Directory kifejezések XML-szerű címkék között vannak, például:

    <Directory /var/www/újoldal>
    ...
    </Directory>
    

    A Directory kifejezésen belüli Options direktíva (többek közt) a következő, szóközökkel elválasztott értékeket fogadja el:

    • ExecCGI - Lehetővé teszi a CGI parancsfájlok futtatását. A CGI parancsfájlok nem kerülnek végrehajtásra, ha ez a beállítás nincs megadva.

      [Tipp]

      A legtöbb fájlt nem szabad úgy végrehajtani, mint a CGI parancsfájlokat. Ez nagyon veszélyes lenne. A CGI parancsfájlokat a DocumentRoot direktívában megadott könyvtártól külön, és nem az alatt kell tartani, valamint csak ezt a könyvtárat szabad megadni az ExecCGI direktívában. Ez az alapértelmezés, és a CGI parancsfájlok alapértelmezett helye a /usr/lib/cgi-bin.

    • Includes - Engedélyezi a kiszolgálóoldali beágyazásokat. A kiszolgálóoldali beágyazások lehetővé teszik a HTML fájloknak más fájlok beágyazását. Ez egy ritkán használt beállítás. További információkért lásd az Apache2 SSI HOWTO leírást.

    • IncludesNOEXEC - Engedélyezi a kiszolgálóoldali beágyazásokat, de letiltja az #exec és #include parancsokat a CGI parancsfájlokban.

    • Indexes - Megjeleníti a könyvtár tartalmának formázott tartalmát, ha a kért könyvtárban nincs DirectoryIndex fájl (például index.html).

      [Figyelem]

      Biztonsági okból ezt általában nem szabad beállítani, a DocumentRoot könyvtárra pedig egyáltalán nem. Ezt a beállítást óvatosan engedélyezze könyvtárszinten, és csak akkor, ha biztosan azt szeretné, hogy a felhasználók lássák a könyvtár teljes tartalmát.

    • Multiview - Tartalomegyeztetéses többszörös nézetek támogatása; ez a beállítás biztonsági okból alapértelmezésben ki van kapcsolva. Lásd az Apache2 dokumentációját erről a beállításról.

    • SymLinksIfOwnerMatch - Csak akkor követi a szimbolikus linket, ha a célfájl vagy -könyvtár tulajdonosa megegyezik a link tulajdonosával.

A httpd beállításai

Ez a szakasz a httpd démon néhány alapvető beállítási lehetőségét ismerteti.

LockFile - A LockFile direktíva megadja a zárolási fájl útvonalát, ha a kiszolgálót a USE_FCNTL_SERIALIZED_ACCEPT vagy USE_FLOCK_SERIALIZED_ACCEPT egyikével fordították. Ezt a helyi lemezen kell tárolni. Az alapértelmezett értéket meg kell hagyni, kivéve ha a naplókönyvtár egy NFS-megosztáson van. Ebben az esetben az alapértelmezett értéket meg kell változtatni a helyi lemezen lévő helyre, mégpedig egy csak a rendszergazda által olvasható könyvtárra.

PidFile - A PidFile direktíva megadja azt a fájlt, amelybe a kiszolgáló a folyamatazonosítóját (pid) rögzíti. Ezt a fájlt csak a rendszergazda olvashatja. a legtöbb esetben az alapértelmezett érték használandó.

User - A User direktíva beállítja a kiszolgáló által a kérések megválaszolására használt felhasználói azonosítót. Ez a beállítás megadja a kiszolgáló hozzáférési jogosultságát. Az ezen felhasználó által elérhető fájlok a webhely látogatói számára is elérhetők lesznek. Az alapértelmezett érték a www-data.

[Figyelem]

Hacsak nem tudja pontosan, mit csinál, ne állítsa a User direktíva értékét root-ra. A root használata User-ként hatalmas biztonsági lyukakat nyit a webkiszolgálóra.

A Group direktíva hasonló a User direktívához. A Group beállítja azt a csoportot, amely tagjaként a kiszolgáló megválaszolja a kéréseket. Az alapértelmezett csoport is a www-data.

Apache2 modulok

Az Apache2 egy moduláris kiszolgáló. Ez azt jelenti, hogy a kiszolgáló magja csak a legalapvetőbb szolgáltatásokat tartalmazza. A bővített szolgáltatások az Apache2-be tölthető modulokban érhetők el. Alapértelmezésben a kiszolgáló fordításkor tartalmaz egy alapértelmezett modulkészletet. Ha a kiszolgálót dinamikusan betöltött modulok használatára fordítják, akkor a modulok külön is lefordíthatók, és a LoadModule direktíva segítségével bármikor felvehetők. Ellenkező esetben az Apache2-t újra kell fordítani a modulok hozzáadásához vagy eltávolításához.

Az Ubuntu a dinamikus modulbetöltés támogatásával fordítja az Apache2-t. Az <IfModule> blokkban megadott konfigurációs direktívák engedélyezése egy adott modul jelenlétéhez köthető.

További Apache2 modulokat is telepíthet és használhat webkiszolgálóján. A következő parancs futtatásával például a MySQL hitelesítés modul telepíthető:

sudo apt-get install libapache2-mod-auth-mysql

További modulokért lásd az /etc/apache2/mods-available könyvtárat.

Modulok engedélyezéséhez használja az a2enmod segédprogramot:

sudo a2enmod auth_mysql
sudo /etc/init.d/apache2 restart

Hasonlóképpen az a2dismod segítségével letilthatók a modulok:

sudo a2dismod auth_mysql
sudo /etc/init.d/apache2 restart

A HTTPS beállítása

A mod_ssl modul fontos szolgáltatással bővíti az Apache2 kiszolgálót: a kommunikáció titkosításának lehetőségével. Amikor a böngésző SSL használatával kommunikál, a https:// előtag jelenik meg a böngésző címsorában, az URI elején.

A mod_ssl modul az apache2-common csomagban érhető el. A mod_ssl modul engedélyezéséhez adja ki a következő parancsot a terminálban:

sudo a2enmod ssl

Az alapértelmezett HTTPS beállítófájl az /etc/apache2/sites-available/default-ssl. Az Apache2 számára a HTTPS biztosításához egy tanúsítvány- és egy kulcsfájl is szükséges. Az alapértelmezett HTTPS beállítás az ssl-cert csomag által előállított tanúsítványt és kulcsot használja. Ezek tesztelési célra megfelelnek, de az automatikusan előállított tanúsítványt és kulcsot le kell cserélni a weboldalra vagy a kiszolgálóra kiadottakkal. A kulcs előállításával és tanúsítvány beszerzésével kapcsolatos információkért lásd a „Tanúsítványok” szakaszt.

Adja ki a következőt az Apache2 beállításához a HTTPS használatára:

sudo a2ensite default-ssl
[Megjegyzés]

Az /etc/ssl/certs és /etc/ssl/private könyvtárak az alapértelmezett helyek. Ha a tanúsítványt és a kulcsot másik könyvtárba másolja, ne felejtse ennek megfelelően módosítani az SSLCertificateFile és SSLCertificateKeyFile direktívák értékeit.

Miután beállította az Apache2-t a HTTPS használatára, indítsa újra a szolgáltatást az új beállítások engedélyezéséhez:

sudo /etc/init.d/apache2 restart
[Megjegyzés]

A tanúsítvány beszerzésének módjától függően szükség lehet egy jelmondat megadására az Apache2 indításakor.

A biztonságos kiszolgálóoldalakat a https://webhely_címe/url/ böngészőcímsorba írásával érheti el.

Hivatkozások

  • Az Apache2 dokumentációja részletes információkat tartalmaz az Apache2 konfigurációs direktíváiról. A hivatalos Apache2 dokumentáció elérhető az apache2-doc csomagban is.

  • Az SSL-lel kapcsolatos információkért lásd a Mod SSL dokumentációs oldalát.

  • Az O'Reilly Apache Cookbook című könyve is hasznos információforrás bizonyos Apache2 beállítások elvégzéséhez.

  • Az Ubuntuval kapcsolatos Apache2 kérdéseket felteheti a #ubuntu-server IRC-csatornán a freenode.net hálózaton.

  • A PHP és MySQL szokásos integrálása esetén az Ubuntu wiki Apache MySQL PHP oldala szintén hasznos olvasmány.