Aplicaciones Networking Server Web

Servidor Nginx + PHP

Introducción

Nginx (“engine x”) es un servidor HTTP y proxy inverso de alto rendimiento, y un servidor proxy para IMAP/POP3/SMTP. Nginx fue desarrollado por Igor Sysoev para Rambler.ru, el segundo sitio web más visitado de Rusia, donde ha estado funcionando en producción más de dos años y medio. Igor ha lanzado el código fuente bajo una licencia estilo BSD. Aunque aún se encuentra en una etapa beta, Nginx es conocido por su estabilidad, gran conjunto de características, configuración simple, y bajo consumo de recursos.

El servidor web que vamos a utilizar es Nginx en OpenBSD.

Conexión de nginx con php será mediante FastCGI.

NGINX

Instalación

Instalamos los paquetes precompilados vía FTP de la página oficial de OpenBSD.

Instalación

[[OpenBSD:/root]]# pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.3/packages/i386/nginx-0.5.35.tgz
...
nginx-0.5.35: complete
--- nginx-0.5.35 -------------------
Documentation on nginx can be found on the wiki:
        http://wiki.codemongers.com/Main

You may want to put the following into your /etc/rc.local:

# start nginx
if [[|-x /usr/local/sbin/nginx ]]; then
        echo -n ' nginx'; /usr/local/sbin/nginx
fi

Configuración

Editamos el archivo de configuración, por defecto, Nginx será instalado en la ruta /etc/nginx/nginx.conf

nginx.conf

# user  nobody;
user _nginx _nginx;
worker_processes  2;

error_log  /var/log/nginx-error.log;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include        /etc/nginx/mime.types;
    default_type  application/octet-stream;
    include    /etc/nginx/fastcgi.conf; #libreria PHP
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    gzip  on;
    server { #php/fastcgi
        listen       80;
        #server_name  localhost;
        access_log     /var/www/domains/dominio.org/logs/access.log;
        error_log      /var/www/domains/dominio.org/logs/error.log;
        server_name    dominio.org;
       
         location / {
            #root   /var/nginx/html;
            root    /var/www/domains/dominio.org/htdocs;
            index  index.html index.htm index.php;
        }
  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        location ~ .php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            fastcgi_param  SCRIPT_FILENAME   /var/www/domains/dominio.org/htdocs$fastcgi_script_name;
            include       /etc/nginx/fastcgi.conf;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            #root   /var/nginx/html;
             root   html;
        }

En la primera parte del fichero nos podemos encontrar algunas configuraciones genéricas del servidor independientemente de las configuraciones de los host:

nginx.conf

# user  nobody;
user _nginx _nginx;
worker_processes  2;

error_log  /var/log/nginx-error.log;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

Donde:

user: es el usuario con el que queremos que corra nginx, en nuestro caso _nginx

worker_processes: el número de hilos que queremos que abra nginx

pid: el pid que va a tener nuestro servidor

worker_connections: el número de conexiones máximo que vamos a permitir que tengan los hilos

A partir de aquí comienzan las configuraciones como servidor http, por eso mismo comienzan con la directiva http. Como podemos observar, en función de que parte se está configurando, vamos añadiendo las directivas entre llaves.

nginx.conf

http {
    include        /etc/nginx/mime.types;
    default_type  application/octet-stream;
    include    /etc/nginx/fastcgi.conf; #libreria PHP
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    gzip  on;
    
        }

Donde:

include: esta directiva se puede poner en cualquier parte del fichero para incluir un fichero externo de configuración, en este caso incluimos los tipos mime

default_type: es el tipo por defecto de dato

sendfile: qué utilizamos para proporcionar los ficheros que se solicitan

keep_alive_timeout: el tiempo de vida de una conexión keepalive

gzip: está activada la compresión de páginas

Con la directiva server ya se puede decir que comienza la definición de un host:

nginx.conf

server { #php/fastcgi
        listen       80;
        access_log     /var/www/domains/dominio.org/logs/access.log;
        error_log      /var/www/domains/dominio.org/logs/error.log;
        server_name    dominio.org;
       
         location / {
            #root   /var/nginx/html;
            root    /var/www/domains/dominio.org/htdocs;
            index  index.html index.htm index.php;
        }

Donde:

server: como decíamos, es el comienzo de la configuración del host virtual

listen: el puerto donde va a escuchar el servidor, en este caso, tenemos escrito el 80

server_name: nombre del servidor

acess_log: dónde vamos a escribir el log de acceso

error_log: dónde vamos a escribir el log de error

root: directorio raíz del host.

index: qué ficheros van a parsearse como index

error_page: a qué página redireccionamos cuando se produce el error indicado. error_page soporta la redirección en función de si el error es un 404 o un 500, como está indicado en el fichero de configuración.

Los tres primeros son importantes si hacemos peticiones POST.

El directorio para los logs, /var/www/domains/dominio.org/logs, y el directorio para las páginas, /var/www/domains/dominio.org/htdocs, pueden ser otros. En cualquier caso, los deberemos crear a mano.

Despues de editar el fichero de configuración en /etc/nginx/nginx.conf al gusto. Inicia el servidor ejecutando /usr/local/sbin/nginx como superusuario root.

Como indica el último mensaje de instalación, para que el servicio de nginx cargue automáticamente cada vez que se reinicia el servidor es necesario agregarle las siguientes lineas en el fichero /etc/rc.local.

rc.local

# start nginx
if [[|-x /usr/local/sbin/nginx ]]; then
        echo -n ' nginx'; /usr/local/sbin/nginx
fi

Después de cualquier cambio en el fichero de configuración de nginx es necesario un restart. Para reiniciar el servicio es necesario ejecutar la siguiente linea, para tomar el nuevo cambio.

reinicio del daemon

kill -HUP `cat /var/run/nginx.pid`

PHP5-CORE

Instalación

Instalando el paquete precompilado desde servidor FTP de OpenBSD.

instalación

[[OpenBSD:/root]]# pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.3/packages/i386/php5-core-5.2.5p2.tgz
...
php5-core-5.2.5p2: complete
--- php5-core-5.2.5p2 -------------------
To enable the php5 module please create a symbolic
link from /var/www/conf/modules.sample/php5.conf
to /var/www/conf/modules/php5.conf.

ln -s /var/www/conf/modules.sample/php5.conf 
        /var/www/conf/modules

The recommended php configuration has been installed
to /var/www/conf/php.ini.

Don't forget that the default OpenBSD httpd is chrooted
into /var/www by default, so you may need to create support
directories such as /var/www/tmp for PHP to work correctly.

El archivo de configuración se instaló en la ruta /var/www/conf/modules/php5.conf para que se habilite algunos módulos o librerías de php es necesario ejecutar la siguiente línea como se indica el mensaje de instalación.

linkeo

[[OpenBSD:/root]]# ln -s /var/www/conf/modules.sample/php5.conf /var/www/conf/modules

FastCGI

Instalación

Instalamos el paquete php5-FastCGI que son requisito para habilitar librerías de php en el modulo de NGINX.

instalación

[[OpenBSD:/root]]# pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.3/packages/i386/php5-fastcgi-5.2.5p0.tgz

Configuración

Una vez terminada la instalación, se habilita la siguiente línea de PHP en la configuración del fichero /etc/nginx/nginx.conf.

nginx.conf

  - pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        location ~ .php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            fastcgi_param  SCRIPT_FILENAME   /var/www/domains/dominio.org/htdocs$fastcgi_script_name;
            fastcgi_intercept_errors on;
            include       /etc/nginx/fastcgi.conf;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            #root   /var/nginx/html;
             root   html;
        }

Donde:

location ~ .php$: estamos indicando que las directivas de este contexto se aplicarán para los ficheros que terminen en php

fastcgi_pass: es la directiva que indica cómo nos conectaremos a FastCGI

fastcgi_index: si la petición se hace a una url finalizada con ”/”, se añadirá el nombre de fichero que indicamos aquí

fastcgi_param: asignamos parámetros que serán transferidos al servidor de FastCGI

fastcgi_intercept_errors: indicamos si transmitimos los errorers 4xx ó 5xx a nginx para que los gestione él

Para no hacer más grande el fichero de configuración el resto de las directivas de FastCGI las incluimos en un fichero separado. En realidad son todos parámetros que son recomendables tener en la configuración de la siguiente ruta: /etc/nginx/fastcgi.conf.

fastcgi.conf

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

  - PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

La última línea es necesaria si hemos compilado php con la directiva “force redirect”, aunque por la configuración que tenemos no nos es muy necesaria.

Por último para levantar el servidor simplemente con un comando. Para ello necesitamos el programa spawn-fcgi de lighttpg.

La manera de obtener spawn-fcgi es sencilla; si tienes ports entonces:

spawn_fcgi

  # cd /usr/ports/www/lighttpd
  # make 

   Solo compilo y entonces,

  # cp work/lighttpd/spawn-fcgi /usr/local/bin
  # make clean

inicio spawn_fcgi

[[OpenBSD:/root]]# /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www 
                 -g www -f /usr/local/bin/php-fastcgi

Ahora simplemente crea un archivo .php en /var/www/domains/dominio.org/htdocs

info.php


  - echo "<?php phpinfo() ?>" > /var/www/domains/dominio.org/htdocs/info.php
  - lynx http://localhost/info.php


Personal Tools