Az Apache Common Gateway Interface (CGI) csatolójával dinamikus tartalom is eloállítható különféle programokkal vagy parancsfájlokkal, amelyeket általában CGI-parancsfájlok néven szokás emlegetni. CGI-parancsfájlok bármilyen programozási nyelven írhatók. Leggyakrabban a Perlhez és PHP-hoz hasonló parancsnyelveket használnak e célra.
Ahhoz, hogy az Apache kiszolgálja a CGI-parancsfájlok által eloállított tartalmat, a mod_cgi modult aktiválni kell. Szükség van a mod_alias-ra is. Alapértelmezés szerint mindkét modul be van kapcsolva. A modulok aktiválásának részletei: Szakasz 28.4.2, Aktiválás és deaktiválás.
FIGYELMEZTETÉS: CGI-biztonság
A CGI-parancsfájlok végrehajtásának engedélyezése potenciális biztonsági rést jelent a kiszolgálón. További információ: Szakasz 28.7, Biztonsági problémák elkerülése.
openSUSE rendszereken a CGI-parancsfájlok végrehajtása kizárólag a /srv/www/cgi-bin/ könyvtárból engedélyezett. Ez a hely viszont már be is van elore állítva a CGI-parancsfájlok futtatására. Ha virtuális gépeket használ (lásd Virtuális gépek konfigurációja) és a parancsfájlokat a géphez tartozó könyvtárba kívánja helyezni, akkor ezt a könyvtárat elobb fel kell oldani és be kell állítani.
Példa 28-5 Virtuális gépek beállítása CGI-hez
ScriptAlias /cgi-bin/ "/srv/www/www.example.com/cgi-bin/"<Directory "/srv/www/www.example.com/cgi-bin/"> Options +ExecCGI
AddHandler cgi-script .cgi .pl
Order allow,deny
Allow from all </Directory>
Azt jelzi az Apache számára, hogy a könyvtárban található minden fájlt tekintsen CGI-parancsfájlnak. | |
Engedélyezi a CGI-parancsfájlok végrehajtását | |
Azt jelzi a kiszolgáló számára, hogy a .pl és .cgi kiterjesztésu fájlokat tekintse CGI-parancsfájloknak. Módosítsa igényei szerint. | |
Az Order és Allow direktívák szabályozzák az alapértelmezett hozzáférés állapotát, illetve az Allow és Deny direktívák kiértékelésének a sorrendjét. A jelen esetben a |
A CGI-programozás eltér annyiban a "szokásos" programozástól, hogy a CGI-programokat és -parancsfájlokat egy MIME-Type fejlécnek kell megeloznie, például egy ilyennek: Content-type: text/html. A kliens megkapja ezt a fejlécet, hogy tisztában legyen vele, milyen típusú tartalom is érkezik ezután. Másodszor, a parancsfájl kimenete valami olyan kell, hogy legyen, amit a kliens (jellemzoen egy webböngészo) megért – vagyis elsosorban HTML, esetleg sima szöveg vagy például egy kép.
Az Apache csomag része egy egyszeru példaparancsfájl, az /usr/share/doc/packages/apache2/test-cgi. Ez néhány környezeti változó tartalmát írja ki egyszeru szövegként. Másolja át ezt a parancsfájlt akár az /srv/www/cgi-bin/ könyvtárba, akár a virtuális gép parancsfájl-könyvtárába (/srv/www/www.example.com/cgi-bin/) és nevezze át test.cgi névre.
A webkiszolgáló által elérheto fájloknak a root felhasználó tulajdonában kell lenniük (további információ: Szakasz 28.7, Biztonsági problémák elkerülése). Mivel a webkiszolgáló más felhasználó nevében fut, a CGI-parancsfájloknak mindenki által olvashatónak és végrehajthatónak kell lenniük. Váltson át a CGI-könyvtárba, és adja ki a chmod 755 test.cgi parancsot a megfelelo jogosultságok biztosításához.
Most már beírhatja a böngészobe a http://localhost/cgi-bin/test.cgi vagy a http://www.example.com/cgi-bin/test.cgi címet. Meg kell, hogy jelenjen a CGI/1.0 test script report
oldal.
Ha nem jelenik meg a tesztprogram kimenete, csak egy hibaüzenet látszik, akkor ellenorizze az alábbiakat:
CGI-hibaelhárítás
Újratöltötte-e a kiszolgálót a konfiguráció módosítása után? Ellenorizze ezt az rcapache2 probe paranccsal.
Ha egyéni CGI-könyvtárat állított be, helyesek-e a beállítások? Ha nem biztos benne, próbálja ki a parancsfájlt az alapértelmezett CGI-könyvtárral (/srv/www/cgi-bin/) és érje el a http://localhost/cgi-bin/test.cgi címen.
Rendben vannak-e a fájljogosultságok? Váltson át a CGI-könyvtárba, és adja ki az ls -l test.cgi parancsot. A kimenetnek így kell kezdodnie:
-rwxr-xr-x 1 root root
Gyozodjön meg róla, hogy a parancsfájl nem tartalmaz programozási hibákat. Ha a test.cgi-t használja, ez nem fordulhat elo, de ha saját programokat ír, mindig gyozodjön meg róla, hogy azok hibátlanul muködnek.