====== Apache Worker MPM PHP CGI Suexec Setup ======
Components to an Apache + SuExec + FCGI + PHP setup:
First, need some variables to stay the same throughout the setup.
User Apache runs as: daemon
User CGI programs run as: steve
Parent directory location of CGI binaries, web documents
1. Apache must be configured with specific SuExec command line arguments.
For an OS X user development system, these would be passed to Apache's configure script:
--enable-suexec \
--with-suexec-docroot=/var/www \
--with-suexec-bin=/usr/local/steve/apache2/bin/suexec \
--with-suexec-caller=daemon \
--with-suexec-uidmin=500 \
--with-suexec-logfile=/usr/local/steve/apache2/logs/suexec_log \
--with-suexec-gidmin=20 \
--with-suexec-userdir=Sites \
2. Build mod_fcgid against Apache
./configure-apxs && make && make install
make install should edit httpd.conf so that it loads the module, but if not, add it in there:
LoadModule fcgid_module modules/mod_fcgid.so
3. Build PHP as normal, install as a CGI binary
4. Create a PHP-wrapper script. Because of how SuExec works, both the script and the directory must be owned by this user.
# mkdir /private/var/www/fcgi-bin/
# chown -R steve:
http://nx.beandog.org/php/php-wrapper
5. Add parts to Apache configuration
load fcgid module globally (httpd.conf):
LoadModule fcgid_module modules/mod_fcgid.so
Setup the fcgi-bin directory to contain handlers and allow executable CGI files (httpd.conf):
SetHandler fcgid-script
Options +ExecCGI
Order allow,deny
Allow from all
Setup PHP handler extension globally (httpd.conf):
AddHandler fcgid-script .php
FcgidWrapper /private/var/www/fcgi-bin/php-wrapper .php
Turn on SuExec globally (httpd.conf):
SuexecUserGroup steve staff
Add a VirtualHost directive that is under the compiled docroot for SuExec:
ServerName qa.steve.beandog.org
DocumentRoot "/Users/steve/Sites/qa"