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