Kezdőoldal » Számítástechnika » Programozás » PHP fastcgi beállítást leírná...

PHP fastcgi beállítást leírná valaki?

Figyelt kérdés
Lépésről lépésre. Milyen modulokat töltünk le, mit hova írunk, mit hova másolunk, minek milyen jogosultságot adunk, stb stb. Végignéztem a googlet, de eddig egyetlen leírás sem műkösött/hiányos volt.
2010. jan. 17. 20:12
 1/7 A kérdező kommentje:

Felraktam a modulokat suexec, mod_fastcgi, meg az összeset amiben a php név szerepelt. Betöltöttem az apach httpd.conf fájl segítségével.


SuexecUserGroup "#1005" "#1006"

ServerName domain.com

ServerAlias www.domain.com

ServerAlias webmail.domain.com

ServerAlias admin.domain.com

DocumentRoot /home/arnyek/public_html

ErrorLog /var/log/virtualmin/domain.com_error_log

CustomLog /var/log/virtualmin/domain.com_access_log combined

ScriptAlias /cgi-bin/ /home/arnyek/cgi-bin/php-cgi

DirectoryIndex index.html index.htm index.php index.php4 index.php5

<Directory /home/arnyek/public_html>

Options -Indexes +IncludesNOEXEC +FollowSymLinks

allow from all

AllowOverride All

</Directory>

<Directory /home/arnyek/cgi-bin>

allow from all

</Directory>

RewriteEngine on

RewriteCond %{HTTP_HOST} =webmail.domain.com

RewriteRule ^(.*) [link] [R]

RewriteCond %{HTTP_HOST} =admin.vps007-250.vpsplant.com

RewriteRule ^(.*) [link] [R]



/home/arnyek/cgi-bin be milyen fájlt kéne tenni mert én beleraktam egy php-fcgi fájlt a következő tartalommal:


#!/bin/sh

HOME="/home/arnyek/"

export HOME

PHPRC=/home/arnyek/cgi-bin #phpini helye

export PHPRC

PHP_FCGI_CHILDREN=4

export PHP_FCGI_CHILDREN

PHP_FCGI_MAX_REQUESTS=5000

export PHP_FCGI_MAX_REQUESTS

#futtatasi beallitasok, basedir, meg amit nem allithat a juzer

exec /usr/bin/php5-cgi


és ebbe a mappába raktam be egy php.ini fájlt is.


Mit rontottam el? Vagy teljesen rosszul csináltam?


Ja és a hibaüzenet INTERNAL SERVER ERROR.

php info fájlt raktam a virtual host /home/arnyek/public_html mappájába p.php néven.

2010. jan. 17. 20:30
 2/7 A kérdező kommentje:

Most egy leírás alapján csináltam egy ilyet. Konzolban:


vim /home/arnyek/cgi-bin/php5-fcgi


és a megjelenő ablaka ezt írtam bele:


#!/bin/sh

# Configuration directory

PHPRC="/etc/php5/cgi"

export PHPRC

# How much children per manager

PHP_FCGI_CHILDREN=4

export PHP_FCGI_CHILDREN

# How much requests should be queued per child

PHP_FCGI_MAX_REQUESTS=5

export PHP_FCGI_MAX_REQUESTS

# What binary to run with above settings

exec /usr/lib/cgi-bin/php5


De így sem működik.

INTERNAL SERVER ERROR 500

2010. jan. 17. 20:43
 3/7 A kérdező kommentje:

vim /home/arnyek/cgi-bin/php5-fcgi


Parancs hatására létrejött egy .php5-fcgi.swp fájl.


Ez mire való?

2010. jan. 17. 20:48
 4/7 A kérdező kommentje:

[Sun Jan 17 21:25:20 2010] [error] [client XXX.XXX.XXX.XXX] SoftException in Application.cpp:202: Script "/home/arnyek/public_html/p.php" resolving to "/home/arnyek/public_html/p.php" not within configured docroot

[Sun Jan 17 21:25:20 2010] [error] [client 91.83.23.73] Premature end of script headers: p.php


Ez vab a php error logban.


Senki nem ért hozzá?

2010. jan. 17. 21:27
 5/7 A kérdező kommentje:

Ö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/share/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!

2010. febr. 13. 15:38
 6/7 A kérdező kommentje:

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.cx/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.

2010. febr. 24. 15:15
 7/7 A kérdező kommentje:

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:

[link]

2010. márc. 7. 15:02

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!