Búsqueda de sitios web

Cómo configurar hosts virtuales basados en nombres e IP (bloques de servidores) con NGINX


En un período de tiempo relativamente corto desde su desarrollo y puesta a disposición (un poco más de 10 años), Nginx ha experimentado un crecimiento sostenido y constante entre los servidores web debido a su alto rendimiento y bajo uso de memoria.

Dado que Nginx es software gratuito y de código abierto, ha sido adoptado por miles de administradores de servidores web en todo el mundo, no sólo en servidores Linux y *nix, sino también en Microsoft Windows.

No te pierdas: Alojamiento virtual basado en nombres e IP de Apache

Para aquellos de nosotros más acostumbrados a Apache, Nginx puede tener una curva de aprendizaje algo pronunciada (al menos ese fue mi caso), pero ciertamente vale la pena una vez que configuras un par de de sitios y comience a ver las estadísticas de tráfico y uso de recursos.

En este artículo explicaremos cómo utilizar Nginx para configurar alojamiento virtual basado en nombres y basado en IP en CentOS/RHEL. 7 servidores y Debian 8 y derivados, empezando por Ubuntu 15.04 y sus spin-offs.

Nuestro escenario de prueba para este artículo es el siguiente:

  1. Sistema Operativo: Servidor Debian 8 Jessie [IP 192.168.0.25]
  2. Puerta de enlace: Enrutador [IP 192.168.0.1]
  3. Servidor web: Nginx 1.6.2-5
  4. Dominios ficticios: www.tecmintlovesnginx.com y www.nginxmeanspower.com.

Instalación del servidor web Nginx

Si aún no lo ha hecho, instale Nginx antes de continuar. Si necesita ayuda para comenzar, una búsqueda rápida de nginx en este sitio le arrojará varios artículos sobre este tema. Haga clic en el ícono de la lupa en la parte superior de esta página y busque la palabra clave nginx. Si no sabe cómo buscar artículos en este sitio, no se preocupe, hemos agregado enlaces a los artículos de nginx, simplemente lea e instálelo según sus respectivas distribuciones de Linux.

  1. Instalar y compilar Nginx desde fuentes en RHEL/CentOS 7
  2. Instalar el servidor web Nginx en Debian 8
  3. Instale Nginx con MariaDB y PHP/PHP-FPM en Fedora 23
  4. Instale el servidor web Nginx en el servidor/escritorio Ubuntu 15.10
  5. Proteger con contraseña los directorios de sitios web de Nginx

Entonces prepárate para continuar con el resto de este tutorial.

Creación de hosts virtuales basados en nombres en Nginx

Como estoy seguro de que ya sabe, un host virtual es un sitio web servido por Nginx en un único VPS en la nube o servidor físico. Sin embargo, en los documentos de Nginx encontrará el término "bloques de servidor", pero son básicamente lo mismo y tienen diferentes nombres.

El primer paso para configurar hosts virtuales es crear uno o más bloques de servidor (en nuestro caso crearemos dos, uno para cada dominio ficticio) en el archivo de configuración principal (/etc/nginx/nginx.conf) o dentro de /etc/nginx/sites-available.

Aunque el nombre de los archivos de configuración en este directorio (sitios-disponibles) se puede configurar como quieras, es una buena idea usar el nombre de los dominios, y además elegimos agregar el Extensión .conf para indicar que se trata de archivos de configuración.

Estos bloques de servidor pueden ser relativamente complejos, pero en su forma básica constan del siguiente contenido:

En /etc/nginx/sites-available/tecmintlovesnginx.com.conf:

server {  
    listen       80;  
    server_name  tecmintlovesnginx.com www.tecmintlovesnginx.com;
    access_log  /var/www/logs/tecmintlovesnginx.access.log;  
    error_log  /var/www/logs/tecmintlovesnginx.error.log error; 
        root   /var/www/tecmintlovesnginx.com/public_html;  
        index  index.html index.htm;  
}

En /etc/nginx/sites-available/nginxmeanspower.com.conf:

server {  
    listen       80;  
    server_name  nginxmeanspower.com www.nginxmeanspower.com;
    access_log  /var/www/logs/nginxmeanspower.access.log;  
    error_log  /var/www/logs/nginxmeanspower.error.log error;
    root   /var/www/nginxmeanspower.com/public_html;  
    index  index.html index.htm;  
}

Puede utilizar los bloques anteriores para comenzar a configurar sus hosts virtuales, o puede crear los archivos con el esqueleto básico desde /etc/nginx/sites-available/default (Debian ) o /etc/nginx/nginx.conf.default (CentOS).

Una vez copiado, cambie sus permisos y propiedad:

chmod 660  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
chmod 660  /etc/nginx/sites-available/nginxmeanspower.com.conf

Debian y derivados

chgrp www-data  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
chgrp www-data  /etc/nginx/sites-available/nginxmeanspower.com.conf

CentOS y RHEL

chgrp nginx  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
chgrp nginx  /etc/nginx/sites-available/nginxmeanspower.com.conf

Cuando haya terminado, debe eliminar el archivo de muestra o cambiarle el nombre para evitar confusiones o conflictos.

Tenga en cuenta que también deberá crear el directorio para los registros (/var/www/logs) y proporcionar el usuario de Nginx (nginx o www-data , dependiendo de si estás ejecutando CentOS o Debian) permisos de lectura y escritura sobre él:

mkdir /var/www/logs
chmod -R 660 /var/www/logs
chgrp <nginx user> /var/www/logs

Los hosts virtuales ahora deben habilitarse creando un enlace simbólico a este archivo en el directorio habilitado para sitios:

ln -s /etc/nginx/sites-available/tecmintlovesnginx.com.conf /etc/nginx/sites-enabled/tecmintlovesnginx.com.conf
ln -s /etc/nginx/sites-available/nginxmeanspower.com.conf /etc/nginx/sites-enabled/nginxmeanspower.com.conf

A continuación, cree un archivo html de muestra llamado index.html dentro de /var/www//public_html para cada uno de los hosts virtuales (reemplace según sea necesario). Modifique el siguiente código según sea necesario:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Tecmint loves Nginx</title>
  </head>
  <body>
  <h1>Tecmint loves Nginx!</h1>
  </body>
</html>

Finalmente, pruebe la configuración de Nginx e inicie el servidor web. Si hay algún error en la configuración, se le pedirá que lo corrija:

nginx -t && systemctl start nginx

y agregue las siguientes entradas a su archivo /etc/hosts en su máquina local como estrategia básica de resolución de nombres:

192.168.0.25 tecmintlovesnginx.com
192.168.0.25 nginxmeanspower.com

Luego inicie un navegador web y vaya a las URL enumeradas anteriormente:

Para agregar más hosts virtuales en Nginx, simplemente repita los pasos descritos anteriormente tantas veces como sea necesario.

Hosts virtuales basados en IP en Nginx

A diferencia de los hosts virtuales basados en nombres, donde se puede acceder a todos los hosts a través de la misma dirección IP, los hosts virtuales basados en IP requieren un IP:port diferente combinación de cada uno.

Esto permite que el servidor web devuelva diferentes sitios según la dirección IP y el puerto donde se recibe la solicitud. Dado que los hosts virtuales basados en nombres nos brindan la ventaja de compartir una dirección IP y un puerto, son el estándar para servidores web de uso general y deben ser la configuración preferida a menos que su versión instalada de Nginx no admita la indicación del nombre del servidor. (SNI), ya sea porque es una versión REALMENTE desactualizada o porque fue compilada sin la opción de compilación –with-http_ssl_module.

Si,

nginx -V

no devuelve las opciones resaltadas a continuación:

deberá actualizar su versión de Nginx o recompilarla, según su método de instalación original. Para compilar Nginx, siga el siguiente artículo:

  1. Instalar y compilar Nginx desde fuentes en RHEL/CentOS 7

Suponiendo que estamos listos, debemos tener en cuenta que otro requisito previo para los hosts virtuales basados en IP es la disponibilidad de IP separadas, ya sea asignándolas a distintas interfaces de red o mediante el uso de IP virtuales. IP (también conocido como alias de IP).

Para realizar alias de IP en Debian (suponiendo que esté usando eth0), edite /etc/network/interfaces de la siguiente manera:

Debian y derivados

auto eth0:1
iface eth0:1 inet static
        address 192.168.0.25
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
auto eth0:2
iface eth0:2 inet static
        address 192.168.0.26
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1

En el ejemplo anterior, creamos dos NIC virtuales a partir de eth0: eth0:1 (192.168.0.25) y eth0:2 (192.168.0.26).

CentOS y RHEL

En CentOS, cambie el nombre de /etc/sysconfig/network-scripts/ifcfg-enp0s3 como ifcfg-enp0s3:1 y haga una copia como ifcfg-enp0s3:2, y luego simplemente cambie las siguientes líneas, respectivamente:

DEVICE="enp0s3:1"
IPADDR=192.168.0.25

y

DEVICE="enp0s3:2"
IPADDR=192.168.0.26

Una vez hecho esto, reinicie el servicio de red:

systemctl restart networking

A continuación, realice los siguientes cambios en los bloques del servidor definidos previamente en este artículo:

En /etc/nginx/sites-available/tecmintlovesnginx.com.conf:

listen 192.168.0.25:80

En /etc/nginx/sites-available/nginxmeanspower.com.conf:

listen 192.168.0.26:80

Finalmente, reinicie Nginx para que los cambios surtan efecto.

systemctl restart nginx

y no olvide actualizar su /etc/hosts local en consecuencia:

192.168.0.25 tecmintlovesnginx.com
192.168.0.26 nginxmeanspower.com

Por lo tanto, cada solicitud realizada a 192.168.0.25 y 192.168.0.26 en el puerto 80 devolverá tecmintlovesnginx.com y nginxmeanspower.com, respectivamente:

Como puede ver en las imágenes de arriba, ahora tiene dos hosts virtuales basados en IP que utilizan la única NIC en su servidor con dos alias de IP diferentes.

Resumen

En este tutorial hemos explicado cómo configurar hosts virtuales basados en nombres y basados en IP en Nginx. Aunque probablemente desee utilizar la primera opción, es importante saber que la otra opción todavía está disponible si la necesita; solo asegúrese de tomar esta decisión después de considerar los hechos descritos en esta guía.

Además, es posible que desee marcar los documentos de Nginx, ya que vale la pena consultarlos con frecuencia mientras crea bloques de servidor (ahí lo tiene, ahora estamos hablando en el lenguaje Nginx) y los configura. No creerá todas las opciones que están disponibles para configurar y ajustar este excelente servidor web.

Como siempre, no dude en escribirnos mediante el siguiente formulario si tiene alguna pregunta o comentario sobre este artículo. Esperamos tener noticias suyas y sus comentarios sobre esta guía son bienvenidos.