systemadmin.es » LAMP y web » Instalación nginx con PHP y spawn-fcgi

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.

NGINX - get async or get sunk

NGINX - get async or get sunk

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 Imprimir

4 comments to “Instalación nginx con PHP y spawn-fcgi”

  1. mkdir -p /usr/local/supervise/spawncgi/
    cat > /usr/local/supervise/nginx/run < /usr/local/supervise/nginx/run <<EOF

    Sí, no?

  2. cierto, ya he corregido el error de copy-paste. Era:

    mkdir -p /usr/local/supervise/nginx/
    

    Muchas gracias Gerard!

  3. Buen tutorial amigo. Me ha servido de mucho, gracias!

  4. Me alegro que te sirviese!

    Saludos!

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>