Hogyan kell beállítani a fastcgi-t apache2 linuxos webszerveren?
ÖNTSÜNK TISZTA VIZET A FASTCGI-BE!
Találtam a neten néhány jó leírást, de ezek közül egyik sem volt alkalmas arra, hogy egy tökéletesen működő fastcgi-t be tudjak állítani.
Ezért szeretném én is leírni, hogy nekem, hogyan sikerült beállítani és mik voltak azok a problémák, ami miatt elsőre nem sikerült a leírások alapján!
Sajnos én sem fogok mindenre kitérni, de aki fastcgi-t akar telepíteni az legyen azért az alapokkal tisztában (pl mit jelent hogy az apacheban be van töltve egy modul vagy mi a cgi módban fordított php5 metapack vagy mire jó az apt-get vagy az yum parancs)
Lássuk akkor hát a fastcgi telepítésének menetét, apache2.2 alá, fcgid modul segítségével DEBIAN 5 alatt:
1. Az apache2-ben a következő moduloknak kell betöltve lenni (ha nincsenek, akkor a csomag kezelővel, apt-get-el le kell tölteni):
actions, alias, cgi, cgid, env, expires, rewrite, negotation, auth_basic, authn_file, authnz_ldap, authz_dbm, authz_default, authz_groupfile, authz_host, authz_owner, authz_user, autoindex, deflate, dir, suexec, fcgid vagy normál mod_fastcgi, headers, include, ldap, mime, mime_magic, setenvif, ssl, userdir, vhost_alias
Természetesen ezek közül sem létfontosságú mind!
2. Hozzunk létre egy UNIX felhasználót és egy csoportot. Nálam mindkettő neve PHP0 lesz és az id 1001, szintén mindkettőnek (a csoportnak és a felhasználónak is)
A www-data felhasználó éd csoport id-je 33-as lesz! A root felhasználó UserID-je és GroupID-je 0.
3. Hozzuk létre az alábbi könyvtárakat az alábbi felhasználói tulajdonságokkal:
var/www/ ---> CHMOD 755 UID:33 GID: 33
var/www/fcgi ---> CHMOD 555 UID:0 GID: 0
var/www/fcgi/main ---> CHMOD 755 UID:1001 GID: 1001
var/www/virtual/ ---> CHMOD 555 UID:0 GID: 0
var/www/virtual/main/ ---> CHMOD 770 UID:1001 GID: 33
var/www/virtual/main/cgi-bin ---> CHMOD 755 UID:1001 GID: 1001
var/www/virtual/main/htdocs ---> CHMOD 755 UID:1001 GID: 1001
var/www/virtual/main/error ---> CHMOD 775 UID:1001 GID: 1001
var/www/virtual/main/phptmp ---> CHMOD 770 UID:1001 GID: 33
Ezek is eltérhetnek igény szerint. A HTDOCS nevű mappa az adott virtual host documentum rootja.
4. A var/www/fcgi/main mappába hozzuk létre a következő fájlt!
php5-fcgi-starter
Tartalma legyen:
------
#!/bin/sh
umask 022
PHPRC="."
export PHPRC
TMPDIR="/var/www/virtual/main/phptmp"
export TMPDIR
PHP_FCGI_CHILDREN=2
export PHP_FCGI_CHILDREN
exec /usr/bin/php5-cgi
------
Mellé rakjunk egy php init!
5. Hozzunk létre egy virtual hostot az apacheban!
Ezek a dolgok legyenek benne!
------
<IfModule suexec_module>
SuexecUserGroup PHP0 PHP0
</IfModule>
#Figyelj oda hogy minden összetevő előtt legyen ott az "<IfModule akármilyen_module>" rész és a lezárója </IfModule>
ServerAdmin webmaster@main
DocumentRoot /var/www/virtual/main/htdocs
ServerName daomaineved.hu #vagy ha nincs akkor töröld ki a sort
ServerAlias www.daomaineved.hu daomaineved.hu *.daomaineved.hu php0.daomaineved.hu
Alias /errors /var/www/virtual/main/errors/
ErrorDocument 401 /errors/401.html
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html
ErrorDocument 503 /errors/503.html
<IfModule mod_cband.c>
CBandUser main
</IfModule>
# httpd awstats support BEGIN.
# httpd awstats support END.
# httpd dmn entry cgi support BEGIN.
ScriptAlias /cgi-bin/ /var/www/virtual/main/cgi-bin/
<Directory /var/www/virtual/main/cgi-bin>
AllowOverride AuthConfig
#Options ExecCGI
Order allow,deny
Allow from all
</Directory>
# httpd dmn entry cgi support END.
<Directory /var/www/virtual/main/htdocs>
# httpd dmn entry PHP support BEGIN.
# httpd dmn entry PHP support END.
Options -Indexes Includes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
# httpd dmn entry PHP2 support BEGIN.
<IfModule mod_php5.c>
php_admin_value open_basedir "/var/www/virtual/main/:/var/www/virtual/main/phptmp/:/usr/s
hare/php/"
php_admin_value upload_tmp_dir "/var/www/virtual/main/phptmp/"
php_admin_value session.save_path "/var/www/virtual/main/phptmp/"
php_admin_value sendmail_path '/usr/sbin/sendmail -f vu2002 -t -i'
</IfModule>
<IfModule mod_fastcgi.c>
ScriptAlias /php5/ /var/www/fcgi/main/
<Directory "/var/www/fcgi/main">
AllowOverride None
Options +ExecCGI -MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>
</IfModule>
<IfModule mod_fcgid.c>
Include /etc/apache2/mods-available/fcgid_ispcp.conf
<Directory /var/www/virtual/main/htdocs>
FCGIWrapper /var/www/fcgi/main/php5-fcgi-starter .php
Options +ExecCGI
</Directory>
<Directory "/var/www/fcgi/main">
AllowOverride None
Options +ExecCGI MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>
</IfModule>
------
6. Állítsuk be a fastcgid modult a configurációs állomány segítségével. Nálam ez így néz ki!
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi .php .php5
SocketPath /var/lib/apache2/fcgid/sock
IdleTimeout 600
IdleScanInterval 120
BusyTimeout 300
BusyScanInterval 120
ErrorScanInterval 3
ZombieScanInterval 3
ProcessLifeTime 900
SpawnScoreUpLimit 10
SpawnScore 1
TerminationScore 2
MaxProcessCount 200
DefaultMaxClassProcessCount 10
DefaultMinClassProcessCount 1
IPCConnectTimeout 900
IPCCommTimeout 900
MaxRequestsPerProcess 500
</IfModule>
7. Indítsuk újra az apache-ot!
8. Ellenőrizzük a működést
Készítsünk phpinfo,php fájlt az alábbi tartalommal:
<?php
phpinfo();
?>
Ezt futtassul le a böngészőben pl [link]
Megjegyzések!
------
Természetesen az itt leírt elérési utak változhatnak, a felhasználó nevek, uid-k, gid-k szintén.
Figyeljünk arra, hogy a php5-fcgi-starter fájl a tulajdonosa által futtatható legyen (exec)
Fontos, hogy a modulokat IfModule tag-be zárjuk.
Ha valakinek kérdése van a leírtakkal kapcsolatban, vagy valamit elírtam, az írjon ide!
Üdv!
Nézzük a fastcgi beállítását most a mod_fastcgi vel. DEBIAN 5 alatt. Ehhez debianon a libapache2-mod-fastcgi.deb et kell telepíteni. Ezt a csomagkezelővel lehet letölteni (apt-get)
Példa domain az srv11.ath.cx lesz.
Szokásos módon belőjük az apache-be a mod_fastcgit és kilőjük az előbb beállított mod_fcgid-t
LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so
A virtual hostunk az SRV11-hez úgy néz ki mint a fcgid példában volt, mert ebben már minden jó php verzió benne van, még a mod_php-s <IfModule ...>
Annyit változtattam a dolgon hogy most a fastcgi wrapper a domain nevével megegyező mappában lesz.
Tehát a mappa szerkezetem így néz ki:
/var/www/virtual/srv11.ath.cx/
/var/www/virtual/srv11.ath.cx/fcgi
/var/www/virtual/srv11.ath.cx/htdocs
/var/www/virtual/srv11.ath.cx/phptmp
/var/www/virtual/srv11.ath.cx/sessions
/var/www/virtual/srv11.ath.cx/errors/
/var/www/virtual/srv11.ath.cx/.... n mappa .../
A phptmp tulaja a vu2002-es user csoportja www-data (GID : 33), a sessionnak is.
A virtual hostot tegyük bele mondjuk a httpd.conf -ba vagy akár egy külön fájlba
------
<VirtualHost 192.168.0.121:80>
<IfModule suexec_module>
SuexecUserGroup vu2002 vu2002
</IfModule>
ServerAdmin webmaster@srv11.ath.cx
DocumentRoot /var/www/virtual/srv11.ath.cx/htdocs
ServerName srv11.ath.cx
ServerAlias www.srv11.ath.cx srv11.ath.cx *.srv11.ath.cx vu2002.srv10.ath.cx
Alias /errors /var/www/virtual/srv11.ath.cx/errors/
ErrorDocument 401 /errors/401.html
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html
ErrorDocument 503 /errors/503.html
<IfModule mod_cband.c>
CBandUser srv11.ath.cx
</IfModule>
# httpd awstats support BEGIN.
# httpd awstats support END.
# httpd dmn entry cgi support BEGIN.
ScriptAlias /cgi-bin/ /var/www/virtual/srv11.ath.cx/cgi-bin/
<Directory /var/www/virtual/srv11.ath.cx/cgi-bin>
AllowOverride AuthConfig
#Options ExecCGI
Order allow,deny
Allow from all
</Directory>
# httpd dmn entry cgi support END.
<Directory /var/www/virtual/srv11.ath.cx/htdocs>
# httpd dmn entry PHP support BEGIN.
# httpd dmn entry PHP support END.
Options -Indexes Includes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
# httpd dmn entry PHP2 support BEGIN.
<IfModule mod_php5.c>
php_admin_value open_basedir "/var/www/virtual/srv11.ath.cx/:/var/www/virtual/srv11.ath.c
x/phptmp/:/usr/share/php/"
php_admin_value upload_tmp_dir "/var/www/virtual/srv11.ath.cx/phptmp/"
php_admin_value session.save_path "/var/www/virtual/srv11.ath.cx/phptmp/"
php_admin_value sendmail_path '/usr/sbin/sendmail -f vu2002 -t -i'
</IfModule>
#EZ LESZ MOST HASZNÁLVA
<IfModule mod_fastcgi.c>
ScriptAlias /php5/ /var/www/virtual/srv11.ath.cx/fcgi/
<Directory "/var/www/virtual/srv11.ath.cx/fcgi">
AllowOverride None
Options +ExecCGI -MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>
</IfModule>
<IfModule mod_fcgid.c>
Include /etc/apache2/mods-available/fcgid_ispcp.conf
<Directory /var/www/virtual/srv11.ath.cx/htdocs>
FCGIWrapper /var/www/virtual/srv11.ath.cx/fcgi/php5-fcgi-starter .php
Options +ExecCGI
</Directory>
<Directory "/var/www/virtual/srv11.ath.cx/fcgi">
AllowOverride None
Options +ExecCGI MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>
</IfModule>
# httpd dmn entry PHP2 support END.
Include /etc/apache2/ispcp/srv11.ath.cx.conf
</VirtualHost>
------
A wrapper a /var/www/virtual/srv11.ath.cx/fcgi mappában egy php5-fcgi-starter fájlban van, aminek a tulaja vu2002 , Futtatható a fájl. Mellette van egy php2002.ini fájl (Az user azonosítóját raktam a fájlhoz, de lehetne php-userneve.ini is)
A php5-fcgi-starter tartalma
------
#!/bin/sh
umask 022
PHPRC="php2002.ini"
export PHPRC
TMPDIR="/var/www/virtual/srv11.ath.cx/phptmp"
export TMPDIR
PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_MAX_REQUESTS
exec /usr/bin/php5-cgi
------
A fastcgi.conf -ot a következő tartalommal töltöttem fel!
------
<IfModule mod_fastcgi.c>
#OLD fastcgi
#AddHandler fastcgi-script .fcgi
#FastCgiWrapper /usr/lib/apache2/suexec
#FastCgiIpcDir /var/lib/apache2/fastcgi
FastCgiWrapper On
FastCgiIpcDir /var/lib/apache2/fastcgi
FastCgiConfig -minProcesses 1 \
-maxProcesses 400 \
-maxClassProcesses 100 \
-multiThreshold 80 \
-killInterval 60 \
-startDelay 5
# -singleThreshold 100 \
# -autoUpdate \
# -pass-header HTTP_AUTHORIZATION
#FastCgiServer /var/www/fcgi/master/php5-fcgi-starter -user www-data -group www-data -idle-timeout 300
AddHandler php-fastcgi .php .php5
<Location /php5/php5-fcgi-starter>
SetHandler fastcgi-script
Options +ExecCGI
</Location>
Action php-fastcgi /php5/php5-fcgi-starter
AddType application/x-httpd-php .php .php5
</IfModule>
------
Ez itt található /etc/apache2/mods-available és a /etc/apache2/mods-enabledbe egy szinbolikus linket teszek rá ha használni akarom, ha nem kell már akkor törlöm a szimbolikus linket!
Apache újraindítsás <? phpinfo(); ?> tartalmú fájlal gyönyörködünk az eredményben. Ha kell a php inivel finomhangolhatjuk a virtualhostra szabott php beállításainkat
Ha van némi előtapasztalatod a leírtak alapján tudod beállítani a fastcgit mod_fastcgi -vel
Ha valamit elírtam / valami nem világos / akkor kérdezni lehet.
A PHP CGI módban való hasznmálatára a fastcgi, és az fcgid modulon kívül a suPHP-val van még lehetőségünk.
Mint előzőekben most is következő környezetben dolgozunk: debian5, apache2 és php5.
Ezt is egy példán keresztül szeretném bemutatni.
srv10.ath.cx lesz a fihktív virtual hostunk, aminek a tartalmát a /var/www/virtual/SRV10/htdocs elérési útvonalon tároljuk.
Betöltöm a suphp modot a2enmod suphp
LoadModule suphp_module /usr/lib/apache2/modules/mod_suphp.so
Felhasználónk, akinek a nevében futa a php-cgi: SRV10.ATH
A html fájlokat www-data felhasználó futtatja (Az apach felhasználó)
Rendszergazda felhasználó : root
A következő mappa szerkezetünk van
/var/www/ => Tulajdonos: root csoport: root
... /virtual/ => Tulajdonos: root csoport: root
... ... /SRV10/ => Tulajdonos: SRV10.ATH csoport: www-data
... ... ... /cgi-bin => Tulajdonos: SRV10.ATH csoport: SRV10.ATH
... ... ... /errors => Tulajdonos: SRV10.ATH csoport: SRV10.ATH
... ... ... /fcgi => Tulajdonos: SRV10.ATH csoport: SRV10.ATH
... ... ... /htdocs => Tulajdonos: SRV10.ATH csoport: www-data
... ... ... /phptmp => Tulajdonos: SRV10.ATH csoport: www-data
... ... ... /session => Tulajdonos: SRV10.ATH csoport: www-data (CHMOD : 1733)
/var/www/virtual/SRV10/fcgi mappában lesz a php ini php-SRV10.ini néven (CHMOD 644)
Itt mindent beállíthatunk: memória limit, open_basedir, stb ...
Beállíthuk a virtual hostot (Erre akár egy külön fájlt is beállíthatunk)
-------------------------------------------------------------------------
ServerAdmin webmaster@SRV10
DocumentRoot /var/www/virtual/SRV10/htdocs
ServerName srv10.ath.cx
#Alias /errors /var/www/virtual/SRV10/errors/
#ErrorDocument 401 /errors/401.html
#ErrorDocument 403 /errors/403.html
#ErrorDocument 404 /errors/404.html
#ErrorDocument 500 /errors/500.html
#ErrorDocument 503 /errors/503.html
<IfModule suexec_module>
SuexecUserGroup SRV10.ATH SRV10.ATH
</IfModule>
ScriptAlias /cgi-bin/ /var/www/virtual/SRV10/cgi-bin/
<Directory /var/www/virtual/SRV10/cgi-bin>
AllowOverride AuthConfig
#Options ExecCGI
Order allow,deny
Allow from all
</Directory>
<Directory /var/www/virtual/SRV10/htdocs>
Options -Indexes Includes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
#Így töltöm be az egyedi php ini-t minden felhasználónak egyedi php lehetőségeket adva
<IfModule mod_suphp.c>
suPHP_ConfigPath /var/www/virtual/SRV10/fcgi/php-SRV10.ini
</IfModule>
----------------------------------------------------------------------
Az apache /etc/apache2/mods-enabled/suphp.conf fájlt az alábbi módon állítotttam be!
------------------------------------------------------------------------------------
<IfModule mod_suphp.c>
AddType application/x-httpd-suphp .php .php3 .php4 .php5 .phtml
suPHP_AddHandler application/x-httpd-suphp
<Directory />
suPHP_Engine on
</Directory>
# By default, disable suPHP for debian packaged web applications as files
# are owned by root and cannot be executed by suPHP because of min_uid.
<Directory /usr/share>
suPHP_Engine off
</Directory>
# # Use a specific php config file (a dir which contains a php.ini file)
# suPHP_ConfigPath /etc/php4/cgi/suphp/
# # Tells mod_suphp NOT to handle requests with the type <mime-type>.
# suPHP_RemoveHandler <mime-type>
</IfModule>
--------------------------------------------------------------------------------------
A suphp-hez használunk még egy globális beállítás fájlt is amit a suphp telepítő alapértelmezetten az /etc/suphp könyvtárba tesz,
aminek a tartalát az alábbi módon állítom be:
-----------------------------------------------------
[global]
;Path to logfile
logfile=/var/log/apache2/suphp.log
;Loglevel
loglevel=info
;User Apache is running as
webserver_user=www-data
;Path all scripts have to be in
docroot=/var/www/virtual
;Path to chroot() to before executing script
;chroot=/var/www/virtual/*
; Security options
allow_file_group_writeable=false
allow_file_others_writeable=false
allow_directory_group_writeable=false
allow_directory_others_writeable=false
;Check wheter script is within DOCUMENT_ROOT
check_vhost_docroot=true
;Send minor error messages to browser
errors_to_browser=true
;PATH environment variable
env_path=/bin:/usr/bin
;Umask to set, specify in octal notation
umask=0077
; Minimum UID
min_uid=100
; Minimum GID
min_gid=100
[handlers]
;Handler for php-scripts
application/x-httpd-suphp="php:/usr/bin/php-cgi"
;Handler for CGI-scripts
x-suphp-cgi="execute:!self"
----------------------------------------------------------
Ha mindent jól csináltunk, akkor újra indítom az apache-ot.
<?php phpinfo(); ?> fájlal ellenőrzöm a működést:
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!