PHP futtatása Apache mod_cgi/mod_cgid modullal.

Egy módja és egyben a legrégibb módja a több PHP verzió használatának Apache szerveren a címben szereplő mod_cgi és mod_cgid modulok használata. Tesztidőszak alatt jó megoldás lehet és nem igényel további külső modulokat. Ebben a fejezetben ennek beállítását mutatom be a korábban beállított virtuális hosztokon.

A fejezet elolvasása előtt mindenképp nézd meg az előkészületekről szóló részt: PHP CGI megoldások Apache webszerveren

Apache 2.4-ben

Először engedélyezni kell a mod_cgid modult

nano /opt/apache/2.4/conf/httpd.conf

A fájlban a következő sor elejéről kell kivenni a kettőskeresztet

#LoadModule cgid_module modules/mod_cgid.so

Valamint az "Actions" modult is engedélyezni kell ugyanígy:

#LoadModule actions_module modules/mod_actions.so

Ez után hozzáférést kell adni a CGI wrapperekhez:

ScriptAlias /php/ /var/www/cgi-bin/

<Directory /var/www/cgi-bin/>
   Require all granted
</Directory>

Majd a virtuális hoszt definíciójában kell az eredeti PHP verziót kikapcsolni, amit modulként fordítottunk bele, valamint az "Action" utasítást használva hivatkozni a CGI wrapper szkriptre.

PHP 5.4.14-hez

nano /opt/apache/2.4/conf/extra/vhosts/002-p5414.a24.vm1.conf

És a <Directory> sor elé írni a következő két sort:

php_flag engine off
Action application/x-httpd-php /php/php-5414

Az egyértelműség kedvéért mutatom egyben is az egész fájl tartalmát:

<VirtualHost *:80>
    ServerName p5414.a24.vm1
    ServerAlias www.p5414.a24.vm1
     
    DocumentRoot "/var/www/vhosts/vm1/a24/p5414/www"
 
    ErrorLog "/var/www/vhosts/vm1/a24/p5414/_logs/error.log"
    CustomLog "/var/www/vhosts/vm1/a24/p5414/_logs/access.log" common
 
    php_flag engine off
    Action application/x-httpd-php /php/php-5414

    <Directory "/var/www/vhosts/vm1/a24/p5414/www">
        Require all granted
    </Directory>
</VirtualHost>

Most pedig hozzunk létre egy index.php-t egy phpinfo() függvényhívással:

echo "<?php phpinfo(); " > /var/www/vm1/a24/p5414/www/index.php

Ha ez megvan, akkor újraindítjuk a webszervert és a http://p5414.a24.vm1/index.php oldalon betölt a php info. Amiben ha az elején a "Server API" mellett "CGI/FastCGI" látszik, akkor jól sikerült a beállítás.

PHP 5.3.24-hez

Teljesen ugyanaz a lépéssorozat, mint az előbb, csak most a következő két új sor kerül a virtuális hoszt definícióba:

php_flag engine off
Action application/x-httpd-php /php/php-5324

És természetesen az index.php fájl is máshova kerül:

echo "<?php phpinfo(); " > /var/www/vm1/a24/p5324/www/index.php

PHP 5.2.17-hez

Hasonlóan az előzőekhez, a két új sor:

php_flag engine off
Action application/x-httpd-php /php/php-5217

És az index.php létrehozása:

echo "<?php phpinfo(); " > /var/www/vm1/a24/p5217/www/index.php

Apache 2.2-ben

Apache 2.2 esetén hasonlóak a lépések, mint 2.4-ben voltak, csak a

Require all granted

helyett

Order allow,deny
Allow from all

kerül a fájlokba. Ezen kívül az alap konfiguráció szerint nincsenek "so" kiterjesztésű fájlokba gyűjtve a modulok a "modules" mappába. Így, mivel a szükséges modulok alapértelmezetten engedélyezettek, nincs mit engedélyezni a httpd.conf-ban.

Ha az Apache-ot a "--enable-mods-shared=all" kapcsolóval fordítottuk volna, akkor minden modul létrejött volna a "modules" mappában is. Az "--enable-modulneve=shared" módon pedig csak a kiszemelt modul.

Ezen kívül a mod_cgi modul van engedélyezve alapértelmezetten. Ellentétben a 2.4-es Apache beállításaival.

Az Apache szerver bin könyvtárában az "apachectl" szkriptet a "-l" ( mínusz kis L ) paraméterrel hívva listázhatók a befordított modulok. apachectl -l

Tehát röviden

Az httpd.conf végére bekerül a következő:

ScriptAlias /php/ /var/www/cgi-bin/

<Directory /var/www/cgi-bin/>
   Order allow,deny
   Allow from all
</Directory>

PHP 5.4.14-hez

A virtuális hoszt leírásába bekerül a következő két sor:

php_flag engine off
Action application/x-httpd-php /php/php-5414

És kap egy index.php-t egy php info-val.

echo "<?php phpinfo(); " > /var/www/vm1/a22/p5414/www/index.php

PHP 5.3.24-hez

A virtuális hoszt leírásába bekerül a következő két sor:

php_flag engine off
Action application/x-httpd-php /php/php-5324

És kap egy index.php-t egy php info-val.

echo "<?php phpinfo(); " > /var/www/vm1/a22/p5324/www/index.php

PHP 5.2.17-hez

A virtuális hoszt leírásába bekerül a következő két sor:

php_flag engine off
Action application/x-httpd-php /php/php-5217

És kap egy index.php-t egy php info-val.

echo "<?php phpinfo(); " > /var/www/vm1/a22/p5217/www/index.php

PHP beállítások

Tudni kell erről a megoldásról, hogy minden alkalommal beolvassa a szerver a php.ini-t, így bármit módosítunk benne, a szerver újraindítása nélkül érvényes lesz.

Egyedi php.ini-t úgy lehet minden virtuális hoszthoz rendelni, ha mindegyikhez egyedi CGI wrapper-t is készítünk. A php-cgi binárist pedig a "-c" kapcsolóval futtatjuk, ami után az egyedi php.ini fájlt kell elhelyezni. Tehát így nézne ki egy wrapper szkript 5.4.14-es PHP-t futtatva:

#!/bin/bash

exec /opt/php/5.4.14/bin/php-cgi -c /var/www/vhosts/vm1/a24/p5414/php.ini

Ha a php.ini virtuális hoszt könyvtárának gyökerébe ( Nem a DocumentRoot-ba !!! ) kerülne

PHP 5.3-tól bejött a PATH és HOST szekció a php.ini -ben, amivel adott domainhez vagy könyvtárhoz rendelhetünk egyedi PHP beállításokat központilag CGI/FastCGI módban. Ez is egy lehetőség, de főleg akkor, ha az ekként futó hosztoknak egy másik közös php.ini-jük van, hogy ne gyűljön a szemét az eredetiben.

További információ: http://us3.php.net/manual/en/ini.sections.php

Szintén PHP 5.3-tól használható a htaccess-style ini, a ".user.ini" nevű ini fájl, ami az eredeti php.ini beállításait úgy tudja módosítani, akár a htaccess, csak php.ini szintaktikával. Ehhez azonban nincs szükség az Apache szerveren az "AllowOverride Options" beállításra.

További információ: http://www.php.net/manual/en/configuration.file.per-user.php és http://www.php.net/manual/en/configuration.changes.php

Alapesetben a php.ini-ben a "cgi.fix_pathinfo" opció értéke 1-es. Azaz bekapcsolt állapotú. Ez annyit jelent, hogy a "SCRIPT_FILENAME" szerverváltozóban a futtatott PHP szkript útvonala kerül. Ha a "cgi.fix_pathinfo" értéke 0, akkor a cgi-wrapper szkript útvonalát látnánk a "SCRIPT_FILENAME" változóban. .

Összefoglalás

Ez tehát az egyik módja a több PHP verzió futtatásának. Akár itt is meg lehetne állni és rögtön használatba venni a szervert. Dolgozni már lehet rajta, de még mindig maradtak problémák. A jogosultságokról például még szó sem esett. Ám az alapfelálláshoz képest, ahol egyetlen PHP verzió volt hasonló módon, máris előrébb vagyunk.

Lehet menteni ezt a gépet is wtk-vm1-v7 néven.

Források

Kategóriák: 
Megosztás/Mentés