En este artículo explicamos cómo instalar Nginx en CentOS 6 paso a paso, de modo que puedas disfrutar de esta gran opción como servicio web en tu servidor o VPS CentOS, incluyendo servidores virtuales y seguridad HTTPS.
Contenido
Antes de instalar Nginx en CentOS 6
Es importante que cumplas los siguientes requerimientos a la hora de seguir esta guía de instalación y configuración de Nginx en CentOS 6 para llegar a buen término:
- Una máquina CentOS 6 actualizada.
- El repositorio EPEL.
- Acceso a consola como root o un usuario con permisos de sudo.
- Conexión a Internet.
Cómo instalar Nginx en CentOS 6
Para instalar Nginx en CentOS 6 necesitamos el repositorio EPEL, ya que no hay paquetes de este servidor web en el repositorio de la distribución. Si no lo tenías, instálalo ya:
~$ sudo yum install -y epel-release
Actualizamos la información de los repositorios:
~$ sudo yum update
Y ahora sí que tenemos disponible el paquete nginx para CentOS 6, que podremos instalar con yum:
~$ sudo yum install -y nginx
Al terminar la descarga e instalación de este paquete y sus dependencias tenemos un nuevo servicio disponible en CentOS 6, el servicio nginx que inicialmente no está en ejecución ni habilitado para su arranque automático.
Lanzamos por vez primera Nginx con el comando service:
~$ sudo service nginx start
Y configuraremos el inicio automático de Nginx con cada arranque de CentOS 6:
~$ sudo chkconfig --level 2345 nginx on
Podemos comprobar en cualquier momento el estado de Nginx con la opción status del comando service:
~$ sudo service nginx status Se está ejecutando nginx (pid 1520)...
Otras opciones interesantes del servicio son:
- stop, para detener el servicio.
- reload, para recargar la configuración de Nginx sin llegar a detenerlo.
- restart, que reinicia el servicio, deteniéndolo y volviéndolo a iniciar.
¿Qué versión de Nginx se ha instalado en CentOS 6?
Si necesitas saber la versión instalada de Nginx en CentOS 6 es tan fácil como lanzar el comando nginx con el parámetro -v:
~$ nginx -v nginx version: nginx/1.10.3
El firewall
El firewall de CentOS 6 suele estar activado por defecto, por lo que bloqueará las conexiones entrantes incluyendo el servicio Nginx. Si queremos que nuestro servidor web sea accesible desde la red tendremos que añadir alguna regla.
En primer lugar consultaremos las reglas existentes en el momento actual:
~$ sudo iptables -L --line Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED 2 ACCEPT icmp -- anywhere anywhere 3 ACCEPT all -- anywhere anywhere 4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh 5 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited ...
Por brevedad sólo se muestra la parte de la salida del comando que nos interesa, la cadena INPUT. Podemos ver que la quinta regla rechaza todo el tráfico, así que debemos insertar las reglas para Nginx por encima de esa regla, o en esa posición.
Para permitir el tráfico HTTP estándar hacia Nginx añadimos esta regla:
~$ sudo iptables -I INPUT 5 -m state --state NEW -p tcp --dport 80 -j ACCEPT
Si además del protocolo estándar también vas a usar Nginx para ofrecer contenido seguro, mediante HTTPS, entonces es necesario añadir una regla a iptables como la siguiente:
~$ sudo iptables -I INPUT 5 -m state --state NEW -p tcp --dport 443 -j ACCEPT
Por curiosidad, podemos comprobar cómo han quedado nuestras reglas en la configuración de iptables:
~$ sudo iptables -L --line Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED 2 ACCEPT icmp -- anywhere anywhere 3 ACCEPT all -- anywhere anywhere 4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh 5 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https 6 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http 7 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited ...
No debemos olvidar guardar la configuración de iptables para que estos cambios sean permanentes:
~$ sudo service iptables save
Probar Nginx en CentOS 6
Pero la mejor forma de probar Nginx en CentOS 6 es abrir un navegador e introducir como URL la dirección IP, el nombre del sistema o el dominio (si lo tiene) del servidor CentOS 6.
En este ejemplo la máquina CentOS 6 está configurada con el dominio centos6.local, así que podemos usar http://centos6.local como URL:
Y aquí tenemos la página web por defecto de Nginx en CentOS 6.
Cómo configurar Nginx en CentOS 6
Vamos a configurar Nginx en CentOS 6 trabajando directamente sobre sus archivos de configuración, que residen bajo la ruta /etc/nginx/.
Aunque el archivo principal es nginx.conf, se incluyen configuraciones de otros archivos específicos y subdirectorios como conf.d/ y default.d/.
Un dato que te puede resultar útil en algún momento es que el servicio Nginx corre con el usuario y grupo nginx.
Servidores virtuales
Una de las funciones más potentes y útiles de cualquier servidor web, como Nginx, es poder configurar servidores virtuales que respondan a distintos dominios ofreciendo distintos sitios web, todo dentro de un mismo servidor CentOS 6.
En Nginx para CentOS 6 la página web que hemos visto anteriormente corresponde al servidor virtual por defecto, cuya configuración se encuentra en el archivo /etc/nginx/conf.d/default.conf.
Del servidor por defecto interesa saber que tiene su carpeta de documentos web en la ruta /usr/share/nginx/html/, por si deseas incluir tu propia página web.
Para añadir un nuevo servidor virtual que responda a un dominio adicional apuntando al servidor CentOS 6, crearemos un archivo de configuración independiente. Por ejemplo, para el dominio centos6fanclub.local:
~$ sudo nano /etc/nginx/conf.d/virtual-centos6fanclub.local.conf
El contenido será este:
server { listen 80; listen [::]:80; server_name centos6fanclub.local; root /usr/share/nginx/centos6fanclub.local; location / { } error_log /var/log/nginx/centos6fanclub.local-error.log; access_log /var/log/nginx/centos6fanclub.local-access.log main; }
Esta configuración está formada por un bloque server dentro del cual podemos ver estas directivas:
- listen, donde indicamos el puerto, en este caso el 80 para el protocolo HTTP estándar, la primera ocurrencia para IPv4 y la segunda para IPv6.
- server_name en la que especificamos el dominio al que responderá el servidor virtual.
- root, que se refiere a la ubicación del directorio de archivos web para este servidor.
- location, un bloque en el que podemos realizar configuraciones para rutas del servidor, en este caso está vacío porque los valores por defecto nos sirven.
- error_log, la ubicación del archivo de registro de errores.
- access_log, similar a la anterior, pero para el archivo de registro de accesos al servidor, indicando además el tipo de formato de registro.
Prepararemos el directorio donde se situarán los documentos web tal y como hemos especificado en la directiva root:
~$ sudo mkdir /usr/share/nginx/centos6fanclub.local
Y un archivo índice:
~$ sudo nano /usr/share/nginx/centos6fanclub.local/index.html
Cualquier mensaje valdrá como contenido:
<h1>Bienvenidos a centos6fanblub.local</h1>
Antes de recargar la configuración de Nginx, podemos validar la configuración del servicio:
~$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Todo parece correcto, por lo que es el momento de recargar la configuración de Nginx:
~$ sudo service nginx reload
Podemos comprobar el funcionamiento del nuevo servidor virtual introduciendo como URL el dominio que acabamos de configurar:
Seguridad SSL para Nginx en CentOS 6
Si tienes tu servidor CentOS 6 con Nginx en un entorno de producción o público, es más que recomendable que ofrezcas conexiones seguras, para lo que tendrás que configurar el protocolo HTTPS con certificados SSL.
Para realizar estas conexiones seguras necesitas una clave RSA y su correspondiente certificado público. Si no los tienes, puedes generar un certificado autofirmado.
Vamos a hacerlo en este ejemplo para el servidor virtual por defecto:
~$ sudo openssl req -newkey rsa:2048 -x509 -nodes -days 3650 -out /etc/pki/tls/certs/centos6.local.crt -keyout /etc/pki/tls/private/centos6.local.key
Durante la creación de los archivos se nos harán una serie de preguntas a las que podemos o no contestar, pero es importante que en «Common Name» especifiquemos el dominio para el que se está creando el certificado:
... Common Name (eg, your name or your server's hostname) []:centos6.local ...
Ahora editaremos el archivo de configuración del servidor:
~$ sudo nano /etc/nginx/conf.d/default.conf
E incluiremos nuevas directivas para la configuración SSL:
... server { listen 80 default_server; listen [::]:80 default_server; listen 443 ssl default_server; listen [::]:443 ssl default_server; server_name _; ssl_certificate /etc/pki/tls/certs/centos6.local.crt; ssl_certificate_key /etc/pki/tls/private/centos6.local.key; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
Básicamente hemos añadido un par de directivas listen para IPv4 e IPv6 que indican el puerto estándar 443 y activando el modo seguro HTTPS.
Y también las directivas ssl_certificate y ssl_certificate_key que indican las rutas del certificado y la clave privada usados para cifrar la conexión.
Recargamos la configuración del servicio:
~$ sudo service nginx reload
Y accedemos de nuevo, esta vez indicando https:// en lugar de http:// en la URL:
En este ejemplo, como estamos usando certificados autofirmados creados sobre la marcha, el navegador nos advierte de que no puede garantizar la autenticidad del certificado.
Depende de qué navegador uses, pero todos permiten de un modo u otro confirmar que se entienden los riesgos y continuar hasta la página solicitada:
Puedes repetir el proceso para el resto de servidores virtuales que tengas configurados, especificando obviamente sus propios certificados.
Conclusión
Ahora ya sabes cómo instalar y configurar el servidor web Nginx en CentOS 6, por lo que podrás ofrecer multitud de páginas web desde tu servidor o VPS CentOS gracias a los servidores virtuales, y con conexiones seguras.
Si te ha quedado alguna duda, o tienes preguntas, sugerencias, etc. puedes dejar un comentario.
¡Apoya comoinstalar.me!
En el caso de que esta guía de instalación y configuración de Nginx en CentOS 6 te haya servido para tus objetivos y te apetezca agradecérnoslo, cualquier mínima aportación contribuye al mantenimiento de este sitio y realización de nuevas guías y tutoriales, y puedes hacerlo dejando una propina a partir de 1 $ desde PayPal:
¡Gracias!