Hace un tiempo les hablé sobre esta serie de tutoriales, sobre cómo instalar y configurar un servidor para hosting de alta demanda. Este artículo tratará sobre instalar y configurar Nginx:
Nginx:
Ya les hablamos de Nginx antes en el artículo Nginx: Una interesante alternativa a Apache, ahí les comentamos que es un servidor web como Apache, LightHttpd o Cherokee, pero que comparado con Apache destaca por su rendimiento y bajo consumo de hardware, precisamente por eso es que muchos sitios grandes como Facebook, MyOpera.com, DropBox o inclusive WordPress.com usan Nginx en vez de Apache. En el mundillo de Linux DesdeLinux no es el único que usa Nginx, hasta donde sé, emsLinux y MuyLinux también lo usan 🙂
Mi experiencia personal con Nginx data de hace varios años, cuando por necesidad empecé a buscar alternativas ligeras a Apache. En ese momento Nginx iba por la versión 0.6 y su compatibilidad con sitios de alta demanda hechos en PHP no era la más óptima, no obstante hoy en día desde la versión 0.9 en adelante (v1.2.1 disponible en Debian Stable, v1.4.2 disponible en ArchLinux) ha mejorado muchísimo, a tal punto de que con una adecuada configuración y unión de Nginx + PHP todo funcionará a las mil maravillas.
En esta serie de tutoriales usaré la versión 1.2.1-2.2 de Nginx, disponible en los repos Stable de Debian (Wheezy).
1. Instalación:
Empezaremos por lo primero, instalar Nginx desde nuestros respositorios.
Si en tu servidor usas una distribución como Debian, Ubuntu o algún derivado en la terminal debes poner lo siguiente y presionar Enter :
aptitude install nginx
En caso de que uses otra distribución en tu server como CentOS, Red Hat, Fedora, simplemente instalen desde el respositorio oficial el paquete: nginx
2. Configuración:
Ya tenemos instalado Nginx, pero necesitamos obviamente configurarlo. Les he preparado un archivo comprimido en el FTP el cual contiene todas las configuraciones que se usan en los servidores de DesdeLinux, tanto para PHP, Nginx, etc. Vamos a descargar y descomprimir ese archivo:
cd ~ && wget http://ftp.desdelinux.net/nginx-spawn-fastcgi.tar.gz && tar xf nginx-spawn-fastcgi.tar.gz
Esto nos creará una carpeta llamada nginx-spawn-fastcgi, de ella necesitaremos para Nginx puro (o sea, sin enlazarlo a PHP) dos archivos:
- nginx.conf -» Archivo principal de configuración de Nginx (hablaremos más adelante de su contenido)
- index.html -» Un simple archivo html que usaremos para ver si de veras Nginx nos funciona en su forma más básica
- mywebsite.net -» Archivo de configuración para un sitio web simple, un VHost (Virtual Host) que configurará el acceso al anterior html
Primero vayamos a movernos hacia la carpeta de configuraciones de Nginx:
cd /etc/nginx/
Luego quitemos su configuración por defecto y pongámosle la nuestra:
mv nginx.conf nginx.conf_BK && cp ~/nginx-spawn-fastcgi/nginx.conf ./
Este como ya dije, es el archivo principal de configuración de Nginx, en él he definido ya lo siguiente:
user www-data; worker_processes 4; pid /var/run/nginx.pid;
Usuario de acceso al sistema de archivos (con el cual nginx accederá a todos lados), cantidad de procesos para trabajar y además el PID (id de proceso de nginx).
También tenemos ahí un pequeño bloque llamado events (configuraciones para eventos) que contiene una línea que indica la cantidad de conexiones máximas permitidas por evento. Más abajo está el bloque llamado http.
Este bloque http es el que contiene casi todo lo relacionado con el hosting, al menos muchas cosas que les interesarán. Por ejemplo el tiempo de vida o de espera máximo (timeout), dónde estarán nuestros logs generales (access.log y error.log), compresión de datos usando gzip, así como otras reglas que podrían serles de utilidad en el futuro.
Una vez puesto en su sitio el archivo principal de configuración, copiemos el archivo de nuestro VHost hacia la carpeta sites-available
cp ~/nginx-spawn-fastcgi/mywebsite.net sites-available/
Además, debemos hacer un enlace simbólico de este archivo hacia la carpeta sites-enabled.
ln -s /etc/nginx/sites-available/mywebsite.net /etc/nginx/sites-enabled/
Les explico la utilidad de tener sites-enabled y sites-available.
Se encontrarán momentos en que deben tener listos y configurados varios archivos vhost, pues en ese servidor pondrán online digamos 5 sitios. No obstante, sucede que aún no es el momento para habilitar 2 de esos 5 vhosts, pero deben tener preparados los archivos para que cuando sea necesario estén online en el menor tiempo posible. Pueden poner cuantos vhosts deseen en sites-available (sitios-disponibles), pues los que Nginx lee para poner online son solo los de sites-enabled (sitios-habilitados), funcionaría también en sentido inverso, en caso de que deseen poner offline (temporalmente por ejemplo) un sitio, no hay necesidad de borrar archivos de su servidor (archivos que necesitaremos en otro momento), simplemente eliminamos el enlace simbólico de sites-enabled y listo. La utilidad de tener enlaces simbólicos y no simplemente copiar el archivo de una carpeta a otra, es que cuando deseemos editar un vhost, no importa si editamos al que está ubicado en enabled o available, al final es un mismo
archivo.
El archivo mywebsite.net como había dicho antes, un vhost que nos sirve de ejemplo, o sea y dicho de otra forma, debemos modificar mywebsite.net y establecer nuestras configuraciones.
Debemos cambiar lo siguiente:
- access_log (línea 3): Esta será la ruta del archivo de log de acceso a este sitio
- error_log (línea 4): Esta será la ruta del archivo de log de errores a este sitio
- server_name (línea 5): La URL, dominio que está hosteado en esa carpeta, por ejemplo, si se tratase del foro de DesdeLinux sería: server_name foro.desdelinux.net
- root (línea 6): La ruta a la carpeta donde están los archivos html, esto dejémoslo en /var/www/ pues solo será una prueba
Ya solo falta copiar el archivo html hacia la carpeta que definimos en nuestro archivo de VHost, /var/www/ :
mkdir /var/www/ && cp ~/nginx-spawn-fastcgi/index.html /var/www/
Luego reiniciamos Nginx y listo:
service nginx restart
Y listo, nos aparecerá algo como esto:
Les recuerdo que estamos trabajando primeramente con Nginx para HTML, sin tener soporte para PHP, esto de instalar PHP y enlazarlo a Nginx será el contenido del próximo tutorial (en pocos días, lo prometo).
En fin, este es el tutorial de instalación y configuración de Nginx para que trabaje puro, o sea, un sitio HTML, espero les sea de interés.
Aclararé que sí, aún hay mejores prácticas que se pueden poner en uso, no obstante esperemos a terminar esta serie de tutoriales y luego evaluaremos el resultado final del trabajo 😉
Saludos
26 comentarios, deja el tuyo
Gracias, muy útil !
Gracias a tí por comentar
En backports está nginx 1.4..
Sí, pero en un server en producción no uso nada de eso 😀
Con «eso» te refieres a la última versión estable y probada que ha liberado nginx, lo haces sonar como si fuera un apt-pinning desde sid. ~_~
Ah venga, es que… en los servers nunca me ha gustado usar otros repos, ni backports ni nada así 🙂
Siempre estable en servidores, eso lo aprendí hace años.
Nginx 1.4 es estable desde abril pasado, en backports está 1.4.1-3.
2013-04-24
nginx-1.4.0 stable version has been released, incorporating many new features developed in the 1.3.x branch – support for proxying of WebSocket connections, OCSP stapling, SPDY module, gunzip filter and more.
http://nginx.org/en/CHANGES-1.4
Usted tiene razón en lo que dice, me quito el sombrero.
Gracias por compartir, actualmente estoy poniendo en practica tus post mas antiguos.
Ya te voy a llenar a preguntas XD
Gracias por leernos 🙂
Cualquier duda o pregunta ya sabes, estamos para ayudar, ahí tienes el foro.desdelinux.net donde entre todos te intentaremos dar la mejor solución
Saludos
Yo tengo una duda tengo LAMP [Linux (Debian Wheezy), Apache, PHP y MySQL] funcionando en mi servidor para WordPress y Owncloud, como migro a Ngnix, otra duda es que diferencia hay entre Ngnix y Lighttpd.
La mayor complicación o dificultad para migrar de Apache a Nginx son las configuraciones de cada sitio, o sea, específicamente los .htaccess que uses.
Los .htaccess es lo más complejo a la hora de pasarte a Nginx, pues son configuraciones diferentes que debes poner en el VHost de Nginx.
Sobre LightHTTPd y Nginx … no sé, usé LightHTTPd una sola vez hace muchos años, actualmente no tengo idea de cómo ande su desarrollo, específicamente usando PHP.
Bastante sencillo se ve el NGINX en comparación con el Apache. Esperando el próximo episodio para poder complementarlo con PHP
Yo esperando los tips para optimizar mas a nginx 😀
Por cierto Gaara, podéis incluir en tu próximo tuto, como implementar soporte SSL.
Saludos.
Los tips que vienen son en realidad para optimizar el procesamiento PHP, caché a sitios, puedo poner el ejemplo de la configuración que usamos en DesdeLinux para Nginx+Wordpress+W3_Total_Cache 🙂
Gracias buen aporte.
Y la guia para archlinux cuando? xD
En Arch viene siendo muy parecido, solo cambian los nombres de los paquetes pero… la conf es casi idéntica
Pero, ¿quién tiene un server en producción con Arch? 😀
Hi there,
Soy yo de nuevo xD…
Estaba siguiendo tus pasos aplicandolos en una maquina con archlinux y tengo el siguiente inconveniente:
[abr4xas@Genius www]$ systemctl status nginx.service
nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
Active: failed (Result: exit-code) since vie 2013-11-15 20:11:35 VET; 1min 13s ago
Process: 1258 ExecStartPre=/usr/bin/nginx -t -q -g pid /run/nginx.pid; daemon on; master_process on; (code=exited, status=1/FAILURE)
Alguna sugerencia 😀
Jo… xox, yo solo quiero un servidor interno, es decir solo quiero remplazar xampp, ¿debo hacer todo esto?
Si lo deseas puedes implementar esto mismo (que repito, es con lo que funciona DL), de hecho mi servidor virtual (que uso para desarrollo y pruebas) lo tengo hecho con esto mismo que explico.
O sea, puedes bien quitar XAMPP y poner esta variante y funcionará bien, o si lo deseas dejar XAMPP… igual te funcionará.
El punto positivo de usar esto que muestro es el muy bajo consumo de hardware comparado con Apache, pero, en tu ordenador personal, que no es un hosting de alta demanda ni mucho menos… si XAMPP te funciona bien, no veo por qué quitarlo 🙂
Ya tengo mi servidor Linux funcionando (Debian, Nginx, MySQL y PHP) me costo mucho trabajo hacer funcionar PHP con Nginx porque estaba acostumbrado a la forma sencilla de Apache Web Server.
Bueno mi pregunta es: ¿Alguien sabe como puedo apuntar un dominio de prueba que he comprado a mi servidor? Me gustaria probar con mi dominio .com a ver que tal, pero no tengo la mas minima idea de como hacerlo, porque siempre he usado una direccion de NOIP Para acceder a el con el DUC de noip.
Espero alguien pueda ayudarme, Gracias!
A mi me sale esto al tratar de conectarme a tu ftp:
cd ~ && wget http://ftp.desdelinux.net/nginx-spawn-fastcgi.tar.gz && tar xf nginx-spawn-fastcgi.tar.gz
HTTP request sent, awaiting response… 404 Not Found
2015-11-23 17:46:30 ERROR 404: Not Found.
Tengo mi servidor en CentOS funcionando (Gunicorn, Nginx, PHP) me costo mucho trabajo hacer que funcionen pero el punto en el que me eh trabado es que la Página Web que quiero lanzar necesita la configuración del proveedor de dominio en este caso Go Daddy, así que en este punto no se como seguir.
me pudieran compartir los archivos de configuracion ya que no los puedo bajar por favor