Este documento proporciona una introducción al servidor web Nginx. Explica cómo instalar Nginx, configurar hosting virtuales, alias, control de acceso y autenticación básica. También cubre cómo usar FastCgi con Nginx para ejecutar scripts como WordPress y realiza comparaciones del rendimiento y uso de memoria de Nginx frente a Apache.
2. Índice
• Introducción
• Comparativa de Servidores Web
• Instalación
• Virtual Hosting
• Alias
• Control de Acceso
• Autenticación Básica
• FastCgi en Nginx
• Comparativa: Apache2 vs Nginx (Memoria)
• Comparativa: Apache2 vs Nginx (Rendimiento)
• Conclusión
• Bibliografía
3. Introducción
Nginx es un servidor web/proxy inverso ligero de alto
rendimiento.
Es software libre y de código abierto con licencia BSD
simplificada. Es multiplataforma por lo que puede instalarse
en Linux, Solarios, BSD, Mac OS X, Windows etc…
Algunos de los sitios conocidos que utilizan Nginx son
Wordpress, GitHub, SourceForge, Badoo y partes de
Facebook.
4. Comparativa de Servidores Web
Actualmente ocupa el tercer puesto en el mercado siguiendo
muy de cerca a IIS de Windows y creciendo.
5. Instalación
La instalación del servidor web Nginx es bastante simple,
ejecutamos los siguiente comandos para instalarlo y
arrancarlo:
~# aptitude install nginx
~# /etc/init.d/gninx start
Si tenemos otro servidor web en la máquina nos dará un fallo,
solo tenemos que para el otro servidor web.
6. Virtual Hosting
Lo primero que hacemos es crear el directorio y el fichero
html:
~# mkdir /var/www/principal
~# nano /var/www/principal
~#chwon –R www-data:www-data /var/www
Ahora vamos a „/etc/nginx/sites-available‟ y creamos un nuevo
fichero, el mío se llamará „principal‟
~# nano /etc/nginx/sites-availables/principal
7. Virtual Hosting
Contenido del fichero „principal‟:
server {
server_name www.example.com;
access_log /var/log/nginx/www.log;
location / {
root /var/www/principal;
index index.htm index.html;
}
}
8. Virtual Hosting
Por último borramos el enlace default de la ruta
„/etc/nginx/sites-enabled/‟:
~# rm /etc/nginx/sites-enabled/default
Y agregamos el enlace al nuevo virtual hosting y reiniciamos:
~# ln -s /etc/nginx/sites-available/principal
/etc/nginx/sites-enabled/principal
~# /etc/init.d/nginx restart
10. Alias
Creamos la carpeta y el index.html
~# mkdir /var/www/principal/pepe
~# nano /var/www/principal/pepe/index.html
Para agregar un Alias añadimos lo siguiente al archivo del host
creado con anterioridad:
location /pepe {
alias /var/www/principal/pepe/;
index index.htm index.html;
}
12. Control de Acceso
Ahora vamos con el control de acceso a nuestro virtual host,
en este aspecto Nginx es muy similar a Apache2.
Dentro de la directiva location ponemos las líneas para
permitir o denegar el acceso a una red, una máquina, etc…
location /pepe {
alias /var/www/principal/pepe/;
index index.htm index.html;
deny 192.168.2.2;
allow all;
}
13. Control de Acceso
He denegado el acceso de mi máquina Windows a la dirección
www.example.com/pepe/
14. Autenticación Básica
Vamos con la autenticación contra el servidor web para
obtener acceso a un host virtual, para esto debemos agregar
las siguiente líneas en “location” al fichero de nuestro host
virtual.
auth_basic "Restricted";
auth_basic_user_file .htpasswd;
Ahora solo tenemos que crear el fichero con el usuario y
contraseña con el siguiente comando:
~# htpasswd -d -c /etc/nginx/.htpasswd
profesor
16. FastCgi en Nginx
Para probar la ejecución de scripts vamos a instalar FastCgi en
Nginx y probamos instalando Wordpress en un virtual
hosting que hemos creado.
Para instalar FastCgi en el servidor web tenemos que instalar
el paquete Php5-fpm.
También tenemos que instalar mysql-server para la base de
datos que utilizaremos para Wordpress.
~# aptitude install mysql-server
~# aptitude install php5-fpm
~# apt-get install php5-mysql
17. FastCgi en Nginx
El siguiente paso será descomentar la siguiente línea del
fichero “/etc/php5/fpm/php.ini”:
cgi.fix_pathinfo=0
Una vez descomentada la línea reiniciamos el servicio para
aplicar los cambios realizados .
~# service php5-fpm restart
18. FastCgi en Nginx
Creamos la base de datos y el usuario para Wordpress con
permisos para todas las tablas de la base de datos
wordpress.
Lo siguiente será renombrar wp-config-sample.php como wp-
config.php y modificar los parámetros:
define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpressuser');
define('DB_PASSWORD', 'usuario');
19. FastCgi en Nginx
El siguiente paso será copiar el contenido de wordpress al
directorio deseado y dar los permisos pertinentes:
~# cp -r wordpress/* /var/www/
~# chown www-data:www-data /var/www/
Copiamos el fichero /etc/nginx/sites-availables/default con el
nombre “wordpress” y modificamos el contenido por el
descrito:
~# cp /etc/nginx/sites-available/default
/etc/nginx/sites-available/wordpress
~# nano /etc/nginx/sites-available/wordpress
20. FastCgi en Nginx
Contenido del fichero /etc/nginx/sites-availables/wordpress:
server {
listen 80;
root /var/www;
index index.php index.html index.htm;
server_name www.tejero.com;
location ~ .php$ {
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
21. FastCgi en Nginx
Por último tenemos que crear el enlace en /etc/nginx/sites-
enabled y borramos el enlace a default:
~# ln -s /etc/nginx/sites-available/wordpress
/etc/nginx/sites-enabled/wordpress
~# rm /etc/nginx/sites-enabled/default
Ahora solo tenemos que reiniciar Nginx:
~# service nginx restart
22. FastCgi en Nginx
Prueba de funcionamiento, para probar el correcto
funcionamiento entramos en la dirección
http://www.tejero.com/ y comenzará la instalación de
Wordpress.
23. Comparativa: Apache2 vs Nginx (Memoria)
Realizamos la medición con 500 peticiones y 2 concurrentes
en Apache2.
24. Comparativa: Apache2 vs Nginx (Memoria)
Realizamos la medición con 500 peticiones y 2 concurrentes
en Nginx.
25. Comparativa: Apache2 vs Nginx (Rendimiento)
Realizamos la medición con 500 peticiones y 2 concurrentes
en Nginx y en Apache2.
26. Conclusión
La conclusión a la que hemos llegado realizando el estudio de
este servidor es que es una muy buena alternativa al
servidor web Apache2.
Después de realizar las comparaciones y de leer sobre este
servidor web hemos llegado a la conclusión de que requiere
menos consumo de memoria que Apache2.
En cuanto al rendimiento, como podemos ver en la gráfica
anterior que tiene un mejor rendimiento que Apache.
Al contrario que Apache2, Nginx es mucho mas eficiente
cuanto mayor sea el número de conexiones concurrentes.
27. Conclusión
La configuración es similar a la de Apache2 en varios aspectos
y el rendimiento es superior por lo que es una buena opción
a tener en cuenta por las empresas a la hora de montar su
propio servidor web.