
At the previous post, i have setup Nginx as reverse proxy to apache web server. This post will covers the steps how to setup nginx web server to use PHP-FastCGI for dynamic content. Nginx (pronounced “Engine-X”) is a free, open-source HTTP Web server and one of the alternative to Apache http server. It’s a high performance edge web server with the lowest memory footprint and the key features to build modern and efficient web infrastructure. FastCGI is a language independent, scalable, open extension to CGI that provides high performance without the limitations of server specific APIs. FastCGI provides better scalability and performance.
1. Prepared yum repository for nginx :
[root@centos63 ~]# vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
2. Install Nginx :
[root@centos63 ~]# yum install nginx -y
3. Install required php packages :
[root@centos63 ~]# yum install php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy -y
Examples of Software Installed and the Dependency:
Installed:
php-eaccelerator.i686 1:0.9.6.1-1.el6 php-imap.i686 0:5.3.3-14.el6_3 php-ldap.i686 0:5.3.3-14.el6_3
php-magickwand.i686 0:1.0.9-1.el6 php-magpierss.noarch 0:0.72-6.el6 php-mssql.i686 0:5.3.3-1.el6
php-odbc.i686 0:5.3.3-14.el6_3 php-pear.noarch 1:1.9.4-4.el6 php-shout.i686 0:0.9.2-6.el6
php-snmp.i686 0:5.3.3-14.el6_3 php-soap.i686 0:5.3.3-14.el6_3 php-tidy.i686 0:5.3.3-14.el6_3
php-xml.i686 0:5.3.3-14.el6_3 php-xmlrpc.i686 0:5.3.3-14.el6_3
Dependency Installed:
ConsoleKit.i686 0:0.4.1-3.el6 ConsoleKit-libs.i686 0:0.4.1-3.el6
GConf2.i686 0:2.28.0-6.el6 ImageMagick.i686 0:6.5.4.7-6.el6_2
ORBit2.i686 0:2.14.17-3.1.el6 atk.i686 0:1.28.0-2.el6
avahi-libs.i686 0:0.6.25-11.el6 cairo.i686 0:1.8.8-3.1.el6
cups-libs.i686 1:1.4.2-48.el6_3.1 dbus.i686 1:1.2.24-7.el6_3
eggdbus.i686 0:0.6-3.el6 fontconfig.i686 0:2.8.0-3.el6
freetds.i686 0:0.91-2.el6 ghostscript.i686 0:8.70-14.el6_3.1
ghostscript-fonts.noarch 0:5.50-23.1.el6 gtk2.i686 0:2.18.9-10.el6
hicolor-icon-theme.noarch 0:0.11-1.1.el6 jasper-libs.i686 0:1.900.1-15.el6_1.1
lcms-libs.i686 0:1.19-1.el6 libICE.i686 0:1.0.6-1.el6
libIDL.i686 0:0.8.13-2.1.el6 libSM.i686 0:1.1.0-7.1.el6
libXcomposite.i686 0:0.4.1-2.el6 libXcursor.i686 0:1.1.10-2.el6
libXdamage.i686 0:1.1.2-1.el6 libXext.i686 0:1.1-3.el6
libXfixes.i686 0:4.0.4-1.el6 libXfont.i686 0:1.4.1-2.el6_1
libXft.i686 0:2.1.13-4.1.el6 libXi.i686 0:1.3-3.el6
libXinerama.i686 0:1.1-1.el6 libXrandr.i686 0:1.3.0-4.el6
libXrender.i686 0:0.9.5-1.el6 libXt.i686 0:1.0.7-1.el6
libc-client.i686 0:2007e-11.el6 libcroco.i686 0:0.6.2-5.el6
libfontenc.i686 0:1.0.5-2.el6 libgsf.i686 0:1.14.15-5.el6
libogg.i686 2:1.1.4-2.1.el6 librsvg2.i686 0:2.26.0-5.el6_1.1.0.1.centos
libshout.i686 0:2.2.2-5.1.el6 libthai.i686 0:0.1.12-3.el6
libtheora.i686 1:1.1.0-2.el6 libtidy.i686 0:0.99.0-19.20070615.1.el6
libtiff.i686 0:3.9.4-6.el6_3 libvorbis.i686 1:1.2.3-4.el6_2.1
libwmf-lite.i686 0:0.2.8.4-22.el6.centos lm_sensors-libs.i686 0:3.1.1-10.el6
net-snmp.i686 1:5.5-41.el6_3.1 net-snmp-libs.i686 1:5.5-41.el6_3.1
pango.i686 0:1.28.1-3.el6_0.5.1.centos pixman.i686 0:0.18.4-1.el6_0.1
polkit.i686 0:0.96-2.el6_0.1 sgml-common.noarch 0:0.6.3-32.el6
speex.i686 0:1.2-0.12.rc1.1.el6 unixODBC.i686 0:2.2.14-11.el6
urw-fonts.noarch 0:2.4-10.el6 xorg-x11-font-utils.i686 1:7.2-11.el6
Dependency Updated:
dbus-libs.i686 1:1.2.24-7.el6_3
Complete!
4. Configure EPEL Repository on CentOS 6.3 and install spawn-fcgi :
[root@centos63 ~]# yum install spawn-fcgi -y
5. Start configure nginx. It is better to backup original nginx config file :
[root@centos63 ~]# cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
6. Create nginx DocumentRoot for ehowstuff.local virtual host :
[root@centos63 ~]# mkdir -p /var/www/html/ehowstuff.local
[root@centos63 ~]# mkdir -p /var/www/html/ehowstuff.local/public_html
[root@centos63 ~]# chown -R nginx:nginx /var/www/html/ehowstuff.local/public_html
7. Create folder where to store access.log and error.log :
[root@centos63 ~]# mkdir -p /var/log/nginx/ehowstuff.local
[root@centos63 ~]# chown -R nginx:nginx /var/log/nginx/ehowstuff.local
8. Modify default nginx config file :
[root@centos63 ~]# vi /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
9. Add the host configuration file under /etc/nginx/conf.d/. Nginx config file will load all *.conf files under conf.d folder.
As example, the website domain is ehowstuff.local. So virtual server ehowstuff.local will be created and named as ehowstuff.local.conf :
[root@centos63 ~]# vi /etc/nginx/conf.d/ehowstuff.local.conf
server {
server_name www.ehowstuff.local ehowstuff.local;
access_log /var/log/nginx/ehowstuff.local/access.log;
error_log /var/log/nginx/ehowstuff.local/error.log;
root /var/www/html/ehowstuff.local/public_html;
location / {
index index.html index.htm index.php;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/ehowstuff.local/public_html$fastcgi_script_name;
}
}
10. Check your nginx version :
[root@centos63 ~]# nginx -v
nginx version: nginx/1.2.4
11. Configure php-fastcgi :
[root@centos63 ~]# cd /opt
[root@centos63 opt]# wget -O php-fastcgi-rpm.sh http://library.linode.com/assets/696-php-fastcgi-rpm.sh
[root@centos63 opt]# mv php-fastcgi-rpm.sh /usr/bin/php-fastcgi
[root@centos63 opt]# chmod +x /usr/bin/php-fastcgi
[root@centos63 opt]# wget -O php-fastcgi-init-rpm.sh http://library.linode.com/assets/697-php-fastcgi-init-rpm.sh
[root@centos63 opt]# mv php-fastcgi-init-rpm.sh /etc/rc.d/init.d/php-fastcgi
[root@centos63 opt]# chmod +x /etc/rc.d/init.d/php-fastcgi
12. Start php-fastcgi to control spawn-fcgi :
[root@centos63 ~]# /etc/init.d/php-fastcgi start
Starting php-cgi: spawn-fcgi: child spawned successfully: PID: 3380
[ OK ]
13. Start Nginx service :
[root@centos63 ~]# service nginx start
14. Make Nginx and php-fastcgi start at boot :
[root@centos63 opt]# chkconfig --add nginx
[root@centos63 opt]# chkconfig nginx on
[root@centos63 opt]# chkconfig --add php-fastcgi
[root@centos63 opt]# chkconfig php-fastcgi on