Cómo configurar hosts virtuales basados en nombre y basados en IP (bloques de servidor) con NGINX


En un período de tiempo relativamente corto desde que se desarrolló y estuvo disponible (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 un software gratuito y de código abierto, ha sido adoptado por miles de administradores de servidores web en todo el mundo, no solo en servidores Linux y * nix, sino también en Microsoft Windows.

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

En este artículo explicaremos cómo usar Nginx para configurar un alojamiento virtual basado en nombres y basado en ip en servidores CentOS/RHEL 7 y Debian 8 y derivados, comenzando con Ubuntu 15.04 y sus derivados.

  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 arrojará varios artículos sobre este tema. Haga clic en el icono 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 aquí, hemos agregado enlaces a los artículos de nginx, simplemente revise e instálelo según sus respectivas distribuciones de Linux.

  1. Instale y compile Nginx desde fuentes en RHEL/CentOS 7
  2. Instale 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 de Ubuntu 15.10
  5. Directorios de sitios web de Nginx protegidos con contraseña

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 que Nginx ofrece en un único servidor VPS o físico en la nube. Sin embargo, en los documentos de Nginx encontrará el término "bloques de servidor" en su lugar, pero son básicamente lo mismo con nombres diferentes.

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 desee, es una buena idea usar el nombre de los dominios y, además, elegimos agregar el .conf extensión 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 usar 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 copiados, cambie sus permisos y propiedad:

# chmod 660  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
# chmod 660  /etc/nginx/sites-available/nginxmeanspower.com.conf
# chgrp www-data  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
# chgrp www-data  /etc/nginx/sites-available/nginxmeanspower.com.conf
# 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 por otro para evitar confusiones o conflictos.

Tenga en cuenta que también deberá crear el directorio para los registros (/var/www/logs ) y proporcionar al usuario de Nginx (nginx o www-data, dependiendo de si está ejecutando CentOS o Debian ) leer y escribir permisos 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 como 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 una 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 nombre donde todos los hosts son accesibles a través de la misma dirección IP, los hosts virtuales basados en IP requieren una combinación IP: puerto diferente 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 nombre 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 de elección a menos que su versión instalada de Nginx no sea compatible con la Indicación de nombre de servidor (SNI) , ya sea porque es una versión REALMENTE desactualizada o porque se compiló sin la opción de compilación –with-http_ssl_module.

Si,

# nginx -V

no devuelve las opciones resaltadas a continuación:

necesitará actualizar su versión de Nginx o recompilarla, dependiendo de su método de instalación original. Para compilar Nginx, siga el artículo a continuación:

  1. Instale y compile Nginx desde fuentes en RHEL/CentOS 7

Suponiendo que estamos listos para comenzar, 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 interfaces de red distintas o mediante el uso de IP virtuales (también conocidas como IP aliasing ).

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

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).

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 de servidor previamente definidos 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 usan 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. Si bien es probable que desee utilizar la primera opción, es importante saber que la otra sigue estando ahí 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 y es bueno consultarlos a menudo mientras crea bloques de servidor (ahí lo tiene, estamos hablando en el lenguaje Nginx ahora) y los configura. No creerá todas las opciones disponibles para configurar y ajustar este excelente servidor web.

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