Instalación nginx con PHP y spawn-fcgi
nginx es un servidor ligero que puede hacer las funciones de servidor web, proxy inverso y proxy de POP3/IMAP. Vamos a ver como configurarlo como servidor web con PHP.
Primero de todo nos aseguramos que tengamos las siguientes librerías instaladas:
for i in pcre-devel openssl-devel zlib-devel; do yum install $i -y; done
Procedemos bajando el código fuente de nginx y descomprimiendolo:
# wget http://sysoev.ru/nginx/nginx-0.6.36.tar.gz
--11:31:57-- http://sysoev.ru/nginx/nginx-0.6.36.tar.gz
=> `nginx-0.6.36.tar.gz'
Resolving sysoev.ru... 81.19.69.70
Connecting to sysoev.ru|81.19.69.70|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 528,425 (516K) [application/octet-stream]
100%[====================================================================================================================================================================>] 528,425 238.03K/s
11:32:03 (237.67 KB/s) - `nginx-0.6.36.tar.gz' saved [528425/528425]
# tar xzf nginx-0.6.36.tar.gz
# cd nginx-0.6.36
Seguimos con el configure:
./configure --prefix=/usr/local/ --without-http_autoindex_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module
Al acabar veremos que nos hace un resumen. Debería ser:
Configuration summary + using system PCRE library + OpenSSL library is not used + md5 library is not used + sha1 library is not used + using system zlib library nginx path prefix: "/usr/local/" nginx binary file: "/usr/local//sbin/nginx" nginx configuration prefix: "/usr/local//conf" nginx configuration file: "/usr/local//conf/nginx.conf" nginx pid file: "/usr/local//logs/nginx.pid" nginx error log file: "/usr/local//logs/error.log" nginx http access log file: "/usr/local//logs/access.log" nginx http client request body temporary files: "/usr/local//client_body_temp" nginx http proxy temporary files: "/usr/local//proxy_temp" nginx http fastcgi temporary files: "/usr/local//fastcgi_temp"
Procedemos compilando el código e instalándolo:
make && make install useradd nginx -s /sbin/nologin
Para instalar PHP en modo CGI vamos a usar spawn-fcgi del proyecto lighttpd:
cd /usr/local/src wget http://www.lighttpd.net/download/spawn-fcgi-1.6.1.tar.gz tar xzf spawn-fcgi-1.6.1.tar.gz cd spawn-fcgi-1.6.1 ./configure && make && make install
A continuación vamos a instalar PHP en modo CGI:
cd /usr/local/src/ wget http://fr2.php.net/get/php-5.2.9.tar.bz2/from/es2.php.net/mirror tar xjf php-5.2.9.tar.bz2 cd php-5.2.9
Para el configure deberemos usar los flags que creamos necesarios para nuestra aplicación añadiendo –enable-fastcgi y –enable-force-cgi-redirect. Por ejemplo:
./configure --with-mysql --with-mysqli --with-config-file-path=/usr local/etc \ --with-zlib --with-gd --with-jpeg-dir=/usr/ --with-gettext \ --with-iconv --enable-mbstring=all --enable-mbregex \ --with-png-dir=/usr --with-mime-magic=/usr/share/misc/magic \ --enable-fastcgi --enable-force-cgi-redirect make && make install
A continuación seguiremos con las daemontools (si no las tenemos ya instaladas)
mkdir -p /usr/local/src cd /usr/local/src wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz tar xzf daemontools-0.76.tar.gz sed -i 's/extern int errno;/#include <errno.h>/' admin/daemontools-0.76/src/error.h cd admin/daemontools-0.76/ ./package/install
A continuación definimos la configuración de nginx:
user nginx;
worker_processes 4;
daemon off;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 3;
gzip on;
server {
listen 80;
server_name 10.10.10.10;
access_log off;
location / {
root /var/www/html;
index index.html index.htm;
}
}
server {
listen 80;
server_name blog.ejemplo.com;
access_log off;
root /var/www/blog.ejemplo.com;
index index.php;
location ~ .php$ {
include /usr/local/conf/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}
}
Mediante esta configuración hemos definido el primer virtual host sin PHP (para contenido estático) y el segundo (blog.ejemplo.com) con PHP.
A continuación definimos los scripts run para las daemontools:
mkdir -p /usr/local/supervise/spawncgi/ cat > /usr/local/supervise/spawncgi/run <<EOF #!/bin/bash FCGI_DAEMON="/usr/local/bin/spawn-fcgi" FCGI_PROGRAM="/usr/local/bin/php-cgi" FCGI_TCPPORT="9000" FCGI_TCPLISTEN="127.0.0.1" FCGI_PIDFILE="/var/run/spawn-fcgi.pid" PHP_FCGI_CHILDREN=4 PHP_FCGI_MAX_REQUESTS=1000 exec \$FCGI_DAEMON -u nginx -g nginx -n -f \$FCGI_PROGRAM -a \$FCGI_TCPLISTEN -p \$FCGI_TCPPORT -C \$PHP_FCGI_CHILDREN -P \$FCGI_PIDFILE EOF mkdir -p /usr/local/supervise/nginx/ cat > /usr/local/supervise/nginx/run <<EOF #!/bin/bash exec /usr/local/sbin/nginx EOF chmod +x /usr/local/supervise/spawncgi/run /usr/local/supervise/nginx/run
Finalmente levantamos los daemons:
ln -s /usr/local/supervise/spawncgi /service ln -s /usr/local/supervise/nginx /service
Relacionados
Imprimir

11. April 2009 at 12:02 am :
mkdir -p /usr/local/supervise/spawncgi/
cat > /usr/local/supervise/nginx/run < /usr/local/supervise/nginx/run <<EOF
Sí, no?
12. April 2009 at 7:22 pm :
cierto, ya he corregido el error de copy-paste. Era:
Muchas gracias Gerard!
4. July 2011 at 10:40 am :
Buen tutorial amigo. Me ha servido de mucho, gracias!
4. July 2011 at 11:11 am :
Me alegro que te sirviese!
Saludos!