PHP CGI megoldások Apache webszerveren

Az előző fejezetekben igyekeztem kellően előkészíteni ezt a lépést, ahol is a beállított virtuális hosztokhoz hozzárendelhetjük a CGI-ként futtatható PHP verziókat. Már ennek is volna több megoldása. Ebben a fejezetben előkészítem a terepet a mod_cgid és mod_fcgid modul beüzemeléséhez Apache 2.4-ben és Apache 2.2-ben.

Az elv

php-cgi bináris

Ha belenézünk bármelyik telepített PHP "bin" könyvtárába, olyanokat találunk ott, mint a "php" ( parancssori PHP programok futtatása ) és "php-cgi". Ez utóbbi ad olyan kimenetet, ami a HTTP fejléceket is tartalmazza. Az Apache webszerver ezt a programot fogja felhasználni arra, hogy tetszőleges virtuális hosztjából tetszőleges PHP verzióval futtathassa a PHP szkriptjeinket és adja tovább a kimenetet a webböngészőnek.

A "php-cgi" bináris nem jön létre, ha a PHP-t a "--disable-cgi" kapcsolóval fordítjuk, illetve PHP 5.3-ban az "--enable-fpm" kapcsoló is hasonló eredményt produkál az FPM engedélyezésével. A "php" bináris pedig akkor nem jön létre, ha a "--disable-cli" kapcsolóval lett fordítva a PHP.

CGI wrapper

A CGI wrapper egy olyan parancssori szkript, ami a fent említett "php-cgi" binárist úgy futtatja le, hogy előtte még végezhet bizonyos műveleteket. Például környezeti változókat állít be. Az Apache webszerver ekkor a CGI wrappert szólítja meg egy kérés alkalmával.

Apache szerver hangolása

Az Apache webszerver valamilyen módon eldönti, hogy milyen típusú fájlokat kell a CGI wrapperen keresztül futtatnia, majd hivatkozik rá. A nagyon általános fogalmazásom oka az, hogy ennek több megoldása is van.

Lehet a "mod_cgi" vagy "mod_cgid" modullokkal, ami alapból elérhető a webszerverben, csak engedélyezni kell. Lehetne "mod_fastcgi" vagy "mod_fcgid" modulokkal, amiket viszont külön le kell tölteni és bele kell fordítani az Apache szerverbe. Utóbbi megoldások gyorsabbak.

Ahhoz viszont, hogy tiszta legyen a kép, érdemes az első modullal kezdeni. Majd a másik kettő közül valamelyikre frissíteni. Ahogy korábban említettem, a mod_fcgid a legújabb megoldás. Ezért, és mert Apache 2.4-ben a mod_fastcgi nem is használható, a mod_fcgid-t fogom választani. Ugyanakkor később az FPM-hez szükség lesz a mod_fastcgi-ra is, mivel 2.2-es szerveren pedig a mod_proxy_fcgi modul nem elérhető, ami kellene a mod_fcgid-hez.

Előkészületek

A folytatáshoz root jogosultságra lesz szükség: sudo su vagy su - root

Létrehozzuk a CGI wrappereket, mert azok mindegyik Apache szervernél használhatók.

PHP 5.4.14-hez

nano /var/www/cgi-bin/php-5414

A tartalma ez legyen:

#!/bin/bash

exec /opt/php/5.4.14/bin/php-cgi

PHP 5.3.24-hez

nano /var/www/cgi-bin/php-5324

A tartalma ez legyen:

#!/bin/bash

exec /opt/php/5.3.24/bin/php-cgi

PHP 5.2.17-hez

nano /var/www/cgi-bin/php-5217

A tartalma ez legyen:

#!/bin/bash

exec /opt/php/5.2.17/bin/php-cgi

Futtatási jog

Mindegyik szkriptnek kell adni futtatási jogot:

chmod -R +x /var/www/cgi-bin/

Megjegyzések

Ez után már lehet válogatni a fent említett 3 megoldás közül, de mindhárom előfeltételei az itt leírtak.

Bár az FPM a CGI megoldások közé sorolható, az mégis kakukktojás, mert annak nincs szüksége wrapper szkriptekre.

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

Hozzászólások

Istváb képe

Komoly szervereken, ahol maximális performanciára törekednek, napjainkban már nem nagyon használnak cgi-t, mivel viszonylag lassú, és ugyanakkor az előre fordított modulok, az előre kompilált programrészek sem divatosak. Persze bizonyos szerverkörnyezetekben még mindig nagyon hasznosak tudnak lenni a cgi-s megoldások is.

Rimelek képe

Kedves István!

(Gondolom, hogy csak elírás a név)

Köszönöm az észrevételt!

Igen, igazad van. Ebben a cikksorozatban azt szeretném bemutatni, hogy milyen lehetőségek vannak. Jön majd az FPM bemutatása is. De főként nem éles szerverekre szánom az itt leírtakat. Hanem otthoni vagy akár munkahelyi tesztkörnyezetnek. Azon belül is olyan projektekre, amiknek elég a virtuális erőforrás és még lehet vele hatékonyan dolgozni.

Ha jártas vagy a témában, azt is megköszönöm, ha akár ide a bejegyzésekhez írsz tapasztalatokat, tanácsokat. Ha időd és kedved engedi.