FreeBSD kézikönyv
Előző | Fejezet 29. Hálózati szerverek | Következő

# 29.7. Az Apache webszerver

Készítette: Murray Stokely.

## 29.7.1. Áttekintés

A FreeBSD szolgálja ki a legforgalmasabb honlapok nagy részét szerte a világban. A mögöttük álló webszerverek általában az Apache webszervert alkalmazzák. Az Apache használatához szükséges csomagok megtalálhatóak a FreeBSD telepítőlemezén is. Ha a FreeBSD első telepítésekor még nem telepítettük volna az Apache szerverét, akkor a `www/apache13` vagy `www/apache12` portból tudjuk feltenni.

Az Apache szervert sikeres telepítését követően be kell állítanunk.

> Megjegyzés: Ebben a szakaszban az Apache webszerver 1.3.X változatát mutatjuk be, mivel ezt használják a legtöbben FreeBSD alatt. Az Apache 2.X rengeteg új technológiát vezetett be, de ezekkel itt most nem foglalkozunk. Az Apache 2.X változatával kapcsolatban keressük fel a http://httpd.apache.org/ oldalt.

## 29.7.2. Beállítás

Az Apache webszerver konfigurációs állománya FreeBSD alatt `/usr/local/etc/apache/httpd.conf` néven található. Ez az állomány egy szokványos UNIX®-os szöveges konfigurációs állomány, ahol a megjegyzéseket egy `#` karakterrel vezetjük be. Az itt használható összes lehetséges beállítási lehetőség átfogó ismertetése meghaladná az egész kézikönyv határait, ezért most csak a leggyakrabban módosított direktívákat fogjuk ismertetni.

`ServerRoot `"/usr/local"``

  Ez adja meg az Apache számára az alapértelmezett könyvtárat. A binárisai ezen belül a `bin` és `sbin` alkönyvtárakban, a konfigurációs állományai pedig az `etc/apache` könyvtárban tárolódnak.

`ServerAdmin `saját@címünk.az.interneten``

  Erre a címre küldhetik nekünk a szerverrel kapcsolatos hibákat. Ez a cím egyes szerver által generált oldalakon jelenik meg, például hibák esetében.

`ServerName `www.minta.com``

  A `ServerName` segítségével meg tudjuk adni, hogy milyen nevet küldjön vissza a szerver a klienseknek olyankor, ha az nem egyezne meg a jelenlegivel (vagyis a `www` nevet használjuk a gépünk valódi neve helyett).

`DocumentRoot `"/usr/local/www/data"``

  A `DocumentRoot` adja meg azt a könyvtárat, ahonnan kiszolgáljuk a dokumentumokat. Alapértelmezés szerint az összes kérés erre a könyvtárra fog vonatkozni, de a szimbolikus linkek és az álnevek akár más helyekre is mutathatnak.

A változtatások végrehajtása előtt mindig is jó ötlet biztonsági másolatot készíteni az Apache konfigurációs állományairól. Ahogy sikerült összerakni egy számunkra megfelelő konfigurációt, készen is állunk az Apache futtatására.

## 29.7.3. Az Apache futtatása

A többi hálózati szervertől eltérően az Apache nem az inetd szuperszerverből fut. A kliensektől érkező HTTP kérések minél gyorsabb kiszolgálásának érdekében úgy állítottuk be, hogy önállóan fusson. Ehhez egy szkriptet is mellékeltünk, amellyel igyekeztünk a lehető legjobban leegyszerűsíteni a szerver indítását, leállítását és újraindítását. Az Apache első indításához adjuk ki a következő parancsot:

    # /usr/local/sbin/apachectl start

Így pedig a szervert bármikor leállíthatjuk:

    # /usr/local/sbin/apachectl stop

Ha valamilyen okból megváltoztattuk volna a szerver beállításait, akkor ezen a módon tudjuk újraindítani:

    # /usr/local/sbin/apachectl restart

Ha a jelenleg megnyitott kapcsolatok felbontása nélkül akarjuk újraindítani az Apache szervert, akkor ezt írjuk be:

    # /usr/local/sbin/apachectl graceful

Mindezekről az apachectl(8) man oldalon találunk bővebb leírást.

Amennyiben szükségünk lenne az Apache elindítására a rendszer indításakor, akkor a következő sort vegyünk fel az `/etc/rc.conf` állományba:

    apache_enable="YES"

Az Apache 2.2 esetében:

    apache22_enable="YES"

Amikor az Apache `httpd` nevű programjának szeretnénk további paranccsori paramétereket átadni a rendszer indítása során, akkor ezeket így tudjuk megadni az `rc.conf` állományban:

    apache_flags=""

Most, miután a webszerverünk működik, a böngészőnkkel mindezt ellenőrizni is tudjuk a `http://localhost/` cím beírásával. Ilyenkor az alapértelmezés szerinti `/usr/local/www/data/index.html` állomány tartalmát láthatjuk.

## 29.7.4. Virtuális nevek

Az Apache a virtuális nevek használatának két különböző módját ismeri. Ezek közül az első módszer a név alapú virtualizáció (Name-based Virtual Hosting). Ilyenkor a kliens HTTP/1.1 fejlécéből próbálja meg a szerver megállapítani a hivatkozási nevet. Segítségével több tartomány is osztozhat egyetlen IP-címen.

Az Apache név alapú virtualizációjának beállításához az alábbi beállítást kell hozzátennünk a `httpd.conf` állományhoz:

    NameVirtualHost *

Ha a webszerverünk neve `www.tartomany.hu`, és hozzá egy `www.valamilyenmasiktartomany.hu` virtuális nevet akarunk megadni, akkor azt a következőképpen tehetjük meg a `httpd.conf` állományon belül:

    <VirtualHost *>
    ServerName www.tartomany.hu
    DocumentRoot /www/tartomany.hu
    </VirtualHost>

    <VirtualHost *>
    ServerName www.valamilyenmasiktartomany.hu
    DocumentRoot /www/valamilyenmasiktartomany.hu
    </VirtualHost>

A címek és elérési utak helyére helyettesítsük be a használni kívánt címeket és elérési utakat.

A virtuális nevek beállításának további részleteivel kapcsolatosan keressük fel az Apache hivatalos dokumentációját a http://httpd.apache.org/docs/vhosts/ címen (angolul).

## 29.7.5. Apache-modulok

Az alap szerver képességeinek kiegészítéséhez több különböző Apache modul áll rendelkezésünkre. A FreeBSD Portgyűjteménye az Apache telepítése mellett lehetőséget ad a népszerűbb bővítményeinek telepítésére is.

### 29.7.5.1. mod_ssl

A mod_ssl modul az OpenSSL könyvtár használatával valósít meg erős titkosítást a biztonságos socket réteg második, illetve harmadik verziójával (Secure Sockets Layer, SSL v2/v3) és a biztonságos szállítási rétegbeli (Transport Layer Security v1) protokoll segítségével. Ez a modul mindent biztosít ahhoz, hogy a megfelelő hatóságok által aláírt tanúsítványokat tudjunk kérni, és ezáltal egy védett webszervert futtassunk FreeBSD-n.

Ha még nem telepítettünk volna fel az Apache szervert, akkor a `www/apache13-modssl` porton keresztül a mod_ssl modullal együtt is fel tudjuk rakni az Apache 1.3.X változatát. Az SSL támogatása pedig már az Apache 2.X `www/apache22` porton keresztül elérhető változataiban alapértelmezés szerint engedélyezett.

### 29.7.5.2. Kapcsolódás nyelvekhez

Mindegyik nagyobb szkriptnyelvhez létezik egy külön Apache-modul, amelyek segítségével komplett Apache-modulokat tudunk készíteni az adott nyelven. Gyakran a dinamikus honlapok is így próbálják a szerverbe épített belső értelmezőn keresztül a külső értelmező indításából és benne a szkriptek lefuttatásából fakadó költségeket megspórolni, ahogy erről a következő szakaszokban olvashatunk.

## 29.7.6. Dinamikus honlapok

Az utóbbi évtizedben egyre több vállalkozás fordult az internet felé bevételeik és részesedéseinek növelésének reményében, amivel egyre jobban megnőtt az igény a dinamikus honlapokra is. Miközben bizonyos cégek, mint például a Microsoft®, a saját fejlesztésű termékeikbe építettek be ehhez támogatást, addig a nyílt forrásokkal foglalkozó közösség sem maradt tétlen és felvette a kesztyűt. A dinamikus tartalom létrehozásához többek közt Django, Ruby on Rails, a mod_perl és a mod_php modulok használhatóak.

### 29.7.6.1. Django

A Django egy BSD típusú licensszel rendelkező keretrendszer, amelynek használatával nagy teljesítményű és elegáns webes alkalmazásokat tudunk gyorsan kifejleszteni. Tartalmaz egy objektum-relációs leképezőt, így az adattípusokat Python-objektumokként tudjuk leírni, és ezekhez az objektumokhoz egy sokrétű, dinamikus adatbázis hozzáférést nyújtó alkalmazásfejlesztői felületet, így a fejlesztőknek egyetlen SQL utasítást sem kell megírniuk. Találhatunk még benne továbbá egy bővíthető sablonrendszert, amelynek köszönhetően az alkalmazás belső működése elválasztható a HTML-beli megjelenésétől.

A Django működéséhez a mod_python modulra, az Apache szerverre és egy tetszőlegesen választott SQL alapú adatbázisrendszerre van szükség. A hozzá tartozó FreeBSD port mindezeket automatikusan telepíti a megadott beállítások szerint.

Példa 29-3. A Django telepítése az Apache, mod_python3 és a PostgreSQL használatával

    # cd /usr/ports/www/py-django; make all install clean -DWITH_MOD_PYTHON3 -DWITH_POSTGRESQL

Miután a Django és a hozzá szükséges komponensek felkerültek rendszerünkre, hozzunk létre egy könyvtárat a leendő Django projektünknek és állítsuk be az Apache szervert, hogy az oldalunk belül a megadott linkekre a saját alkalmazásunkat hívja meg a beágyazott Python-értelmezőn keresztül.

Példa 29-4. Az Apache beállítása a Django és mod_python használatához

A következő sort kell hozzátennünk a `httpd.conf` állományhoz, hogy az Apache bizonyos linkeket a webes alkalmazás felé irányítson át:

    <Location "/">
        SetHandler python-program
        PythonPath "['/a/django/csomagok/helye/'] + sys.path"
        PythonHandler django.core.handlers.modpython
        SetEnv DJANGO_SETTINGS_MODULE azoldalam.beallitasai
        PythonAutoReload On
        PythonDebug On
    </Location>

### 29.7.6.2. Ruby on Rails

A Ruby on Rails egy olyan másik nyílt forráskódú keretrendszer, amivel lényegében egy teljes fejlesztői készletet kapunk és amelyet kifejezetten arra élezték ki, hogy segítségével a webfejlesztők sokkal gyorsabban tudjanak haladni és a komolyabb alkalmazások gyorsabb elkészítése se okozzon nekik gondot. A Portrgyűjteményből pillanatok alatt telepíthető.

    # cd /usr/ports/www/rubygem-rails; make all install clean

### 29.7.6.3. mod_perl

Az Apache és Perl egyesítésén fáradozó projekt a Perl programozási nyelv és az Apache webszerver erejének összehangolásán dolgozik. A mod_perl modulon keresztül Perlben vagyunk képesek modulokat készíteni az Apache szerverhez. Ráadásul a szerverben egy belső állandó értelmező is található hozzá, ezzel igyekeznek megspórolni a külső értelmező és a Perl indításából keletkező többletköltségeket.

A mod_perl több különböző módon állítható munkába. A mod_perl használatához nem szabad elfelejtenünk, hogy a mod_perl 1.0-ás verziója csak az Apache 1.3 változatával működik, és a mod_perl 2.0-ás változata pedig csak az Apache 2.X változataival. A mod_perl 1.0 a `www/mod_perl` portból telepíthető, valamint a statikusan beépített változata a `www/apache13-modperl` portban található. A mod_perl 2.0 a `www/mod_perl2` portból rakható fel.

### 29.7.6.4. mod_php

Írta: Tom Rhodes.

A PHP, vagy másik nevén “PHP, a hipertext feldolgozó” egy általános célú szkriptnyelv, amelyet kifejezetten honlapok fejlesztéséhez hoztak létre. A szabványos HTML ágyazható nyelv felépítésében a C, Java™ és Perl nyelveket ötvözi annak elérése érdekében, hogy ezzel segítse a fejlesztőket a dinamikusan generált oldalak minél gyorsabb megírásában.

A PHP5 támogatását úgy tudjuk hozzáadni az Apache webszerverhez, ha telepítjük a `lang/php5` portot.

Ha a `lang/php5` portot most telepítjük először, akkor a vele kapcsolatos beállításokat tartalmazó `OPTIONS` menü automatikusan megjelenik. Ha ezzel nem találkoznánk, mert például valamikor korábban már felraktuk volna a `lang/php5` portot, akkor a port könyvtárában következő parancs kiadásával tudjuk újra visszahozni:

    # make config

A beállítások között jelöljük be az `APACHE` opciót, amelynek eredményeképpen létrejön az Apache webszerverhez használható mod_php5 betölthető modul.

> Megjegyzés: A PHP4 modult még ma is rengeteg szerver használja több különböző okból (például kompatibilitási problémák vagy a már korábban kiadott tartalom miatt). Ha tehát a mod_php5 helyett inkább a mod_php4 modulra lenne szükségünk, akkor a `lang/php4` portot használjuk. A `lang/php4` portnál is megtalálhatjuk a `lang/php5` fordítási idejű beállításainak nagy részét.

Az iméntiek révén települnek és beállítódnak a dinamikus PHP alkalmazások támogatásához szükséges mouldok. Az `/usr/local/etc/apache/httpd.conf` állományban ellenőrizni is tudjuk, hogy az alábbi részek megjelentek-e:

    LoadModule php5_module        libexec/apache/libphp5.so

    AddModule mod_php5.c
        <IfModule mod_php5.c>
            DirectoryIndex index.php index.html
        </IfModule>
        <IfModule mod_php5.c>
            AddType application/x-httpd-php .php
            AddType application/x-httpd-php-source .phps
        </IfModule>

Ahogy befejeződött a művelet, a PHP modul betöltéséhez mindösszesen az `apachectl` paranccsal kell óvatosan újraindítanunk a webszervert:

    # apachectl graceful

A PHP jövőbeni frissítéseihez már nem lesz szükségünk a `make config` parancsra, mivel a korábban kiválasztott `OPTIONS` menün belüli beállítasainkat a FreeBSD Portgyűjteményéhez tartozó keretrendszer automatikusan elmenti.

A PHP FreeBSD-ben megtalálható támogatása kifejezetten moduláris, ezért az alap telepítése igencsak korlátozott. A további elemek hozzáadásához a `lang/php5-extensions` portot tudjuk használni. A port egy menüvezérelt felületet nyújt a PHP különböző bővítményeinek telepítéséhez. Az egyes bővítményeket azonban a megfelelő portok használatával is fel tudjuk rakni.

Például PHP5 modulhoz úgy tudunk támogatást adni a MySQL adatbázis szerverhez, ha telepítjük a `databases/php5-mysql` portot.

Miután telepítettünk egy bővítményt, az Apache szerverrel újra be kell töltetnünk a megváltozott beállításokat:

    # apachectl graceful

Előző | Tartalom | Következő
Névfeloldás (DNS) | Fel | Állományok átvitele (FTP)

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.