Go Back   HowtoForge Forums | HowtoForge - Linux Howtos and Tutorials > ISPConfig 2 > Installation/Configuration

Do you like HowtoForge? Please consider supporting us by becoming a subscriber.
Reply
 
Thread Tools Display Modes
  #1  
Old 31st May 2006, 11:46
tosser tosser is offline
Junior Member
 
Join Date: May 2006
Posts: 17
Thanks: 0
Thanked 3 Times in 3 Posts
Default fastcgi and php with ispconfig

Howtos about fastcgi and php that are used or consulted:
http://www.debianhowto.de/de/howtos/...ache2_php-fcgi
http://www.syscp.de/wiki/contrib/PHP-FCGI-ger




Apache2 Install
In the first step you install apache2-mpm-worker
Code:
apt-get install apache2-common apache2-mpm-worker apache2-threaded-dev
restart the apache, but without mod_php. mod_php runs not with apache2-mpm-worker! If you want to use mod_php and fastcgi then you need apache2-mpm-prefork!
Code:
/etc/init.d/apache2 restart


Build Suexec
then you load the apache sources to compile a new suexec for fastcgi

Code:
cd /root
apt-get source apache2-common
cd apache2-2.0.54
cd upstream
cd tarballs
tar zxf httpd-2.0.51.tar.gz
cd httpd-2.0.54
cd support
vi suexec.h
edit the follow lines:
Code:
#define AP_HTTPD_USER "www"
with
Code:
#define AP_HTTPD_USER "www-data"
Code:
#define AP_LOG_EXEC DEFAULT_EXP_LOGFILEDIR "/suexec_log" /* Need me? */
with
Code:
#define AP_LOG_EXEC "/var/log/apache2/suexec.log" /* Need me? */
Code:
#define AP_DOC_ROOT DEFAULT_EXP_HTDOCSDIR
with
Code:
#define AP_DOC_ROOT "/var/www"
edit suexec.c
Code:
vi suexec.c
then insert the red market text into
Code:
  /* no file owner check
    if ((uid != dir_info.st_uid) ||
        (gid != dir_info.st_gid) ||
 
 
        (uid != prg_info.st_uid) ||
        (gid != prg_info.st_gid)) {
        log_err("target uid/gid (%ld/%ld) mismatch "
                "with directory (%ld/%ld) or program (%ld/%ld)\n",
                uid, gid,
                dir_info.st_uid, dir_info.st_gid,
                prg_info.st_uid, prg_info.st_gid);
        exit(120);
    }
  */

You need the apache2-header-files to compile suexec
Code:
cp -p /usr/include/apache2/* .
cp -p /usr/include/apr-0/* .
Code:
make suexec
then you must have:
Code:
ls -l suexec
-rwxr-xr-x  1 root root 20565 Aug  5 23:37 suexec
copy the suexec for fcgi to /usr/lib/apache2

Code:
cp suexec /usr/lib/apache2/suexec-fcgi
chmod 4755 /usr/lib/apache2/suexec-fcgi
you can delete the files, that you has downloaded with apt-source



Compile PHP (next step you can install by debian packages without compiling)
Code:
$ cd
mkdir php5
cd php5
wget http://de3.php.net/get/php-5.1.4.tar.gz/from/a/mirror
tar zxf php-5.1.4.tar.gz
cd php-5.1.4.tar.gz

./configure --enable-memory-limit --enable-force-cgi-redirect  \
--enable-track-vars --with-pcre-regex --with-mysql --without-sqlite \
--without-mm --enable-fastcgi --prefix=/home/_USER_/php5
make
make install
Important for php5 compilation and fastcgi:
Code:
apt-get install libmysqlclient14-dev libxml2-dev
./configure with: –enable-fastcgi –without-mm

if any packages missed use
Code:
apt-cache search "MISSED"
apt-get install "THE NEEDED PACKAGE


Inofficial Debain Packages for PHP5:
Code:
echo "deb http://people.debian.org/~dexter php5.1 sarge" >> /etc/apt/sources.list
echo "deb-src http://people.debian.org/~dexter php5.1 sarge" >> /etc/apt/sources.list
apt-get update
apt-get install php5.0 php5.0-common php5.0-fcgi apache2-mpm-worker
apt-get install apache2-mpm-worker because debian would like to remove it and install apache2-mpm-prefork again.



libapache2-mod-fastgi:
you musst edit the "/etc/apt/source.list" and include the non-free sector. It show like that:
Quote:
deb http://ftp.de.debian.org/debian/ stable main non-free
then
Code:
apt-get update
apt-get install libapache2-mod-fastcgi
then you edit the "/etc/apache2/mods-avaible/fastcgi.conf" with you favorit editor
Code:
vi /etc/apache2/mods-available/fastcgi.conf
it musst show like:

Quote:
<IfModule mod_fastcgi.c>

#temporary sockets are stored here, this must be at the top!
FastCgiIpcDir /var/lib/apache2/fastcgi

#config
FastCgiConfig -pass-header Authorization


FastCgiWrapper /usr/lib/apache2/suexec-fcgi


AddHandler php-fastcgi .php
<Location /php/.php-fcgi-starter>
SetHandler fastcgi-script
Options +ExecCGI
</Location>
Action php-fastcgi /php/.php-fcgi-starter

##ISPConfig add this by the installtion of it

##ISPConfig INSTALL## AddType ##ISPConfig INSTALL## application/x-httpd-php .php

<Directory "/var/www/">
AllowOverride None
Options +ExecCGI -MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>
</IfModule>

-------------------------------------------------------------------------
now you must install ispconfig, if you didn't have it or you modify it by own
-------------------------------------------------------------------------


fast-cgi start script
You need a fast-cgi starter for all web hosts:
Code:
cd /root/ispconfig/scripts
vi php-fcgi-starter
my php-fcgi-starter (with apache php5.1-fcgi package):
Quote:
#!/bin/sh
PHPRC="/etc/php5.1/fcgi/"
export PHPRC
PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
exec /usr/bin/php5.1-fcgi
it must have root permissions:
Code:
chmod 755 php-fcgi-starter
chown root:root php-fcgi-starter
Quote:
-rwxr-xr-x 1 root root 151 2006-05-31 00:15 php-fcgi-starter
that the webuser can excute it (by suexec) but can't edit it!


-------------------------------------------------------------------------------------------------------
ispconfig copy this to /var/www/web*/ if you activate php for this web, but you must modify ispconfig:
-------------------------------------------------------------------------------------------------------


modify ISPConfig
you must patch the config.lib.php
Code:
cd /root/ispconfig/scripts/lib
then you must patch config.lib.php with the patch file in the attachemend.
Copy the patch file into /root/ispconfig/scripts/lib.

Code:
patch config.lib.php < fcgi_patch.txt
By the first php activate for a web Account, it will be create a .php-fcgi-starter for this user. If you wish to modify php for this user, then you must create a new php.ini for this user or change it for all. And edit the fast-cgi-starter script for this user.
php_admin_flag in the apache config didn't run and the php_sage_mod button in ispconfig didn't act after the patch/ with fastcgi!

I'm pleased to get feedback and better solutions
and I hope that fastcgi find a way into the default installation of ispconfig
Attached Files
File Type: txt fcgi_patch.txt (1.8 KB, 908 views)

Last edited by tosser; 25th June 2006 at 16:37. Reason: better solution
Reply With Quote
The Following User Says Thank You to tosser For This Useful Post:
Hans (20th April 2007)
Sponsored Links
  #2  
Old 31st May 2006, 13:55
falko falko is offline
Super Moderator
 
Join Date: Apr 2005
Location: Lüneburg, Germany
Posts: 41,701
Thanks: 1,900
Thanked 2,735 Times in 2,571 Posts
Default

Thanks for the nice walkthrough! I've copied it also to the Tips/trickd forum.
__________________
Falko
--
Download the ISPConfig 3 Manual! | Check out the ISPConfig 3 Billing Module!

FB: http://www.facebook.com/howtoforge

nginx-Webhosting: Timme Hosting | Follow me on:
Reply With Quote
  #3  
Old 25th June 2006, 16:41
tosser tosser is offline
Junior Member
 
Join Date: May 2006
Posts: 17
Thanks: 0
Thanked 3 Times in 3 Posts
Default

I have update the howto, with a better solution.
so you can can activate or disable it with the php button.
Reply With Quote
  #4  
Old 26th June 2006, 14:30
tom tom is offline
Senior Member
 
Join Date: Apr 2006
Posts: 492
Thanks: 8
Thanked 8 Times in 7 Posts
Default

@tosser

1: Why you build a new suexec binary does'nt it work even whith the usual suexec installation?

In that german tutorial http://archiv.debianhowto.de/de/apac...suexec_install it tells the need to build an own suexec binary only if somebody does'nt have a filesysthem whitout the possibility to set the immutable-bit.

2. How are you define the FastCgiServer for different vhosts?

Last edited by tom; 26th June 2006 at 14:34.
Reply With Quote
  #5  
Old 26th June 2006, 19:15
tosser tosser is offline
Junior Member
 
Join Date: May 2006
Posts: 17
Thanks: 0
Thanked 3 Times in 3 Posts
Default

Hi!
I build a new suexec, because it is easier to add a new web account in ispconfig. and it make it easier to edit the script as root.
but you can also set the immutable-bit in /root/ispconfig/scripts/lib/config.lib.php. then ISPC. set it automatically after copy the php-fcgi-starter into the user folder.

all web accounts with php have a .php-fcgi-starter script. there can you set some paramaters for fcgi/php (like a php.ini).
in the vhost for this webs ispconfig create a ScriptAlias to the startscript.
like this:
Code:
ScriptAlias /php/ /var/www/web1/
and in the fastcgi config define the php start script with this parameter:
Code:
Action php-fastcgi /php/.php-fcgi-starter
so you start a fcgi-server for the different vhosts.

for example:
fastcgi start it for web1 in /var/www/web1/.php-fcgi-starter
and web2 in /var/www/web2/.php-fcgi-starter

Last edited by tosser; 26th June 2006 at 19:38.
Reply With Quote
The Following User Says Thank You to tosser For This Useful Post:
feeninuoumn (21st December 2013)
  #6  
Old 27th June 2006, 20:02
tom tom is offline
Senior Member
 
Join Date: Apr 2006
Posts: 492
Thanks: 8
Thanked 8 Times in 7 Posts
Default

It is great an more secure to use php-fcgi rather than the usual php. That's the reason why I want to use fcgi. I dont realy understand how to use and define
the "FastCgiServer" for different vhosts (That's me second question) because php-fcgi is still working without a defined "FastCgiServer"?
Reply With Quote
  #7  
Old 27th June 2006, 21:43
tosser tosser is offline
Junior Member
 
Join Date: May 2006
Posts: 17
Thanks: 0
Thanked 3 Times in 3 Posts
Default

The FastCGIServer is php-fcgi.
you define it dynamic for all vhosts. with execute php-fcgi in the php-starter-script and not with a static parameter in the fastcgi.conf!
Reply With Quote
The Following User Says Thank You to tosser For This Useful Post:
feeninuoumn (21st December 2013)
  #8  
Old 27th June 2006, 23:26
tom tom is offline
Senior Member
 
Join Date: Apr 2006
Posts: 492
Thanks: 8
Thanked 8 Times in 7 Posts
Default

Quote:
Originally Posted by tosser
The FastCGIServer is php-fcgi.
you define it dynamic for all vhosts. with execute php-fcgi in the php-starter-script and not with a static parameter in the fastcgi.conf!
ok, thanks! The diffenrent is between static and dynamic, aha:-)
So I had defined a static FastCGIServer and a dynamic one?

I created the fastcgi.conf like:
Code:
<IfModule mod_fastcgi.c>
 FastCgiIpcDir /var/lib/apache2/fastcgi
  AddHandler fastcgi-script .fcgi

  FastCgiWrapper /usr/lib/apache2/suexec2
  FastCgiServer /var/www/php-fcgi-scripts/web1/php-fcgi-starter -user web1_admin -group web1
 FastCgiServer /var/www/php-fcgi-scripts/web2/php-fcgi-starter -user web2_admin -group web2

   AddHandler php-fastcgi .php

<Location /cgi-bin/php-fcgi-starter>
        SetHandler fastcgi-script
        Options +ExecCGI
</Location>

Action php-fastcgi /cgi-bin/php-fcgi-starter

AddType application/x-httpd-php .php
</IfModule>
and the starter script like:
Code:
#!/bin/sh
PHPRC="/var/www/php-fcgi-scripts/web1"
export PHPRC
PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
exec /var/www/php-fcgi-scripts/php5-fcgi-hard/bin/php
and for the vhosts (include in isp httpd.conf options field):
Code:
ScriptAlias /cgi-bin/ /var/www/php-fcgi-scripts/web1/
<Directory '/var/www/php-fcgi-scripts/web1'>
AllowOverride None
Options +ExecCGI -MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>
You mean this
Code:
  FastCgiServer /var/www/php-fcgi-scripts/web1/php-fcgi-starter -user web1_admin -group web1
 FastCgiServer /var/www/php-fcgi-scripts/web2/php-fcgi-starter -user web2_admin -group web2
I have to take off because it's I've already defined the FastCgiServer dynamicly by
PHPRC="/var/www/php-fcgi-scripts/web1", right?

Last edited by tom; 27th June 2006 at 23:30.
Reply With Quote
  #9  
Old 28th June 2006, 19:25
tosser tosser is offline
Junior Member
 
Join Date: May 2006
Posts: 17
Thanks: 0
Thanked 3 Times in 3 Posts
Default

No
PHPRC define the path to configurations like php.ini
FastCgiServer is for an static starter and you can't define two FastCgiServer!

for your vhosts with a own start script you need no fastcgiserver paramter in you config. you can define one fastcgiserver but you mustn't du that.

please read http://www.fastcgi.com/docs/faq.html#PHP, there are a general howto for fastcgi with php

does you use ispconfig for manage your vhosts etc.?
Reply With Quote
  #10  
Old 28th June 2006, 20:41
tom tom is offline
Senior Member
 
Join Date: Apr 2006
Posts: 492
Thanks: 8
Thanked 8 Times in 7 Posts
 
Default

Quote:
Originally Posted by tosser
No
PHPRC define the path to configurations like php.ini
Yes, I no...
Quote:
Originally Posted by tosser
does you use ispconfig for manage your vhosts etc.?
Yes, I use this entries in the ISPConifg Vhosts:
ScriptAlias /cgi-bin/ /var/www/php-fcgi-scripts/web1/
Quote:
<Directory '/var/www/php-fcgi-scripts/web1'>
AllowOverride None
Options +ExecCGI -MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>
and it works fine.

Thanks for the hint of the needless FastCgiServer.

I think this entry is ok for get the right permissions for the fcgi-user in the vhosts. It is defined in
/etc/apache2/mods-enabled/fastcgi.conf
Quote:
FastCgiWrapper /usr/lib/apache2/suexec2
And I think I only need to define it once there and no more in any vhost separate,right?

Last edited by tom; 28th June 2006 at 20:50.
Reply With Quote
Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Fastcgi support till Developers' Forum 0 7th May 2006 18:36


All times are GMT +2. The time now is 16:19.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, vBulletin Solutions, Inc.