nginx, PHP 5.3 and FastCGI on CentOS 5.5, Fedora 13, Red Hat RHEL 5.5/6

This is guide howto install nginx, PHP 5.3 and FastCGI webserver with MySQL and/or PostgreSQL and Memcache support on Fedora 12 and Fedora 13, CentOS 5.5, Red Hat (RHEL) 5.5/6.

nginx (engine x) is a robust, small and high performance http server, reverse proxy server and also mail proxy server.

1. Add and enable needed repositories:

Updated 19.3.2010

Use following repositories to install nginx 0.8.xx version (currently 0.8.36 version)

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
 
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
 
rpm -Uvh http://yum.chrislea.com/centos/5/i386/chl-release-5-3.noarch.rpm
 
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CHL

Just Epel repository is now obsolete, since there can be found only nginx 0.6.xx branch (currenlty version 0.6.39) Check this comment for more info.

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

2. Install following packages:

  • nginx
  • php
  • php-mysql
  • php-pgsql
  • php-pecl-memcache
  • fcgi
  • spawn-fcgi

with following command:

yum --enablerepo=remi install nginx php php-mysql php-pgsql php-pecl-memcache fcgi spawn-fcgi
 
...
 
Dependencies Resolved
 
=================================================================================================
 Package                     Arch           Version                         Repository      Size
=================================================================================================
Installing:
 fcgi                        i386           2.4.0-4.el5                     epel            43 k
 nginx                       i386           0.6.39-2.el5                    epel           318 k
 php                         i386           5.3.1-1.el5.remi                remi           1.3 M
 php-mysql                   i386           5.3.1-1.el5.remi                remi           140 k
 php-pecl-memcache           i386           3.0.4-2.el5.remi.1              remi            64 k
 php-pgsql                   i386           5.3.1-1.el5.remi                remi           119 k
 spawn-fcgi                  i386           1.4.22-2.el5                    epel            17 k
 
Transaction Summary
=================================================================================================
Install      7 Package(s)         
Update       0 Package(s)         
Remove       0 Package(s)

3. Add Fast-CGI init script:

Save following script to /etc/init.d/phpfcgi file.

#!/bin/bash
#
# Startup script for the PHP FastCGI server.
#
# chkconfig: 345 85 15
# description: PHP is an HTML-embedded scripting language
# processname: php
# config: /etc/php.ini
 
# Source function library.
. /etc/rc.d/init.d/functions
 
SPAWNFCGI="/usr/bin/spawn-fcgi" 
PHPFCGI="/usr/bin/php-cgi"
FCGIPORT="9000"
FCGIADDR="127.0.0.1"
PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=1000
ALLOWED_ENV="PATH USER"
USER=nginx
GROUP=nginx
#PHPUSER=php
PIDFILE=/var/run/phpfcgi.pid
 
if [ -z "$PHP_FCGI_CHILDREN" ]; then
  PHP_FCGI_CHILDREN=5
fi
 
ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"
 
case "$1" in
  start)
        PHPFCGI_START=$"Starting ${NAME} service: "
        echo -n $PHPFCGI_START
 
        # check for $PHPUSER, create if non-existent
        if [ -z "`id -u $PHPUSER 2> /dev/null`" ]; then
            useradd -s /sbin/nologin $PHPUSER
        fi
 
        # clean environment
        E=
        for i in $ALLOWED_ENV; do E="$E $i=${!i}"; done
        #daemon --user $PHPUSER --pidfile $PIDFILE "env - $E $PHPFCGI -q -b $FCGIADDR:$FCGIPORT &> /dev/null &"
	daemon $SPAWNFCGI -a ${FCGIADDR} -p ${FCGIPORT} -u ${USER} -g ${GROUP} -P ${PIDFILE} -C ${PHP_FCGI_CHILDREN} -f ${PHPFCGI}
    retval=$?
 
        #pid=`pidof php-cgi`
        #if [ -n "$pid" ]; then
        #    echo $pid > $PIDFILE
        #    success $PHPFCGI_START
        #else
        #    failure $PHPFCGI_START
        #fi
        #echo
        ;;
  stop)
        echo -n "Stopping php-fcgi: "
        killproc -p $PIDFILE phpfcgi
        echo
        ;;
  status)
        status phpfcgi
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
esac
 
exit 0

Originally from here: http://wiki.nginx.org/RedHatPHPFCGIInitScript, but modified little bit, because original script not worked.

Now normal start, stop, status, restart should work:

/etc/init.d/phpfgci start
/etc/init.d/phpfgci stop
/etc/init.d/phpfgci status
/etc/init.d/phpfgci restart

4. Configure nginx:

Modify /etc/nginx/nginx.conf file following rows:

worker_processes  2;
 
keepalive_timeout  25;
 
gzip  on;
 
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
	root           /usr/share/nginx/html;
	fastcgi_pass   127.0.0.1:9000;
	fastcgi_index  index.php;
	fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
	include        fastcgi_params;
}
 
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
	deny  all;
}

5. Start FastCGI and nginx services:

/etc/init.d/phpfcgi start
/etc/init.d/nginx start

6. Create PHP file and print phpinfo:

echo "<?php echo phpinfo(); ?>" > /usr/share/nginx/html/info.php

7. Test info.php file:

Go to http://127.0.0.1/info.php and check that everything is working.

Related posts:

  1. Install Memcached (Memcache) on CentOS 5.5, Fedora 13, Red Hat (RHEL) 5.5 Memcached is a high-performance, distributed memory object caching system, generic in nature, but originally intended for use in speeding up...
  2. Install MySQL 5.1 (5.1.50) on Fedora 13, CentOS 5.5, Red Hat (RHEL) 5.5 MySQL is a relational database management system (RDBMS) that runs as a server providing multi-user access to a number of...
  3. Install MongoDB 1.6.0 on Fedora 13, CentOS 5.5, Red Hat (RHEL) 5.5 What is MongoDB?MongoDB (from “humongous”) is a scalable, high-performance, open source, schema-free, document-oriented database. Written in C++. MongoDB bridges the...
  4. Howto Install PostgreSQL 8.4 Database Server on CentOS, Fedora, Red Hat This is quick guide howto install PostgreSQL 8.4 (current stable 8.4.4) database server on CentOS, Fedora and Red Hat. Fedora...
  5. Install Sun/Oracle Java JDK/JRE 6u21 on Fedora 13/CentOS 5.5/RHEL 5.5/6 This guide is updated/rewritten Jul 29, 2010 to use currently latest Sun/Oracle Java JDK and JRE 6 Update 21 and...

About the Author

Hi, I'm JR and the Founder of if not true then false. I am a software developer, and I have over ten years experience in programming. I'm big fan of Linux and Open Source. And normally I use just Linux environments. - You can follow me on Twitter at @zuissi