Configurar los Bloques del Servidor de Nginx (hosts virtuales) en Ubuntu 16.04

Actualizado el . Posteado en Tutoriales/VideoTutoriales. Visitado 10005 veces.

Configurar los Bloques del Servidor de Nginx hosts virtuales en Ubuntu 16.04

Introducción

Configurar los Bloques del Servidor de Nginx (hosts virtuales) en Ubuntu 16.04. Al usar el servidor web Nginx, los bloques de servidor (similares a los hosts virtuales en Apache) se pueden usar para encapsular detalles de configuración y alojar más de un dominio fuera de un único servidor.

En este tutorial, analizaremos cómo configurar bloques de servidor en Nginx en un servidor Ubuntu 16.04.

Prerrequisitos

Vamos a utilizar un usuario no root con privilegios de sudo largo de este tutorial. Si no tiene configurado un usuario como este, puede crear uno siguiendo nuestro tutorial de instalación inicial del servidor Ubuntu 16.04 .

También necesitará tener Nginx instalado en su servidor. Los siguientes tutoriales cubren este procedimiento:

Cuando haya cumplido con estos requisitos, puede continuar con este tutorial. ¡Manos a la Obra!

Configuración de ejemplo

Para fines de demostración, vamos a configurar dos dominios con nuestro servidor Nginx. Los nombres de dominio que usaremos en este tutorial son example.com y test.com .

Si no tiene dos nombres de dominio adicionales para jugar, use nombres ficticios por ahora y le mostraremos más adelante cómo configurar su computadora local para probar su configuración.

Primer 1: Configurar Nuevos Directorios root de Documentos

Por defecto, Nginx en Ubuntu 16.04 tiene un bloqueo de servidor habilitado por defecto. Está configurado para entregar documentos fuera de un directorio en /var/www/html .

Si bien esto funciona bien para un solo sitio, necesitamos directorios adicionales si vamos a servir en varios sitios. Podemos considerar el directorio /var/www/html como el directorio predeterminado que se servirá si la solicitud del cliente no coincide con ninguno de nuestros otros sitios.

Crearemos una estructura de directorio dentro de /var/www para cada uno de nuestros sitios. El contenido web real se colocará en un directorio html dentro de estos directorios específicos del sitio. Esto nos da cierta flexibilidad adicional para crear otros directorios asociados con nuestros sitios como hermanos en el directorio html si es necesario.

Necesitamos crear estos directorios para cada uno de nuestros sitios. La bandera -p le dice a mkdir que cree los directorios padre necesarios a lo largo del camino:

sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/test.com/html

Ahora que tenemos nuestros directorios, reasignaremos la propiedad de los directorios web a nuestra cuenta de usuario normal. Esto nos permitirá escribirles sin sudo .

 

Nota
Dependiendo de sus necesidades, es posible que tenga que volver a ajustar los permisos o la propiedad de las carpetas para permitir cierto acceso al usuario de www-data . Por ejemplo, los sitios dinámicos a menudo necesitarán esto. Los permisos específicos y los requisitos de propiedad dependen completamente de cuál sea su configuración. Siga las recomendaciones para la tecnología específica que está utilizando.

 

Podemos usar la variable de entorno $USER para asignar la propiedad a la cuenta con la que estamos actualmente registrados (asegúrese de que no haya iniciado sesión como root ). Esto nos permitirá crear o editar fácilmente el contenido en este directorio:

sudo chown -R $USER:$USER /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/test.com/html

Los permisos de nuestras root web deberían ser correctos si no ha modificado su valor de umask , pero podemos asegurarnos escribiendo:

sudo chmod -R 755 /var/www

Nuestra estructura de directorio ahora está configurada y podemos seguir adelante.

Paso 2. crear páginas de muestra para cada sitio

Ahora que tenemos nuestra estructura de directorio configurada, creemos una página predeterminada para cada uno de nuestros sitios para que tengamos algo que mostrar.

Crea un archivo index.html en tu primer dominio:

nano /var/www/example.com/html/index.html

Dentro del archivo, crearemos un archivo realmente básico que indique a qué sitio estamos accediendo actualmente. Se verá así:

/var/www/example.com/html/index.html
<html>
    <head>
        <title>Welcome to Example.com!</title>
    </head>
    <body>
        <h1>Success!  The example.com server block is working!</h1>
    </body>
</html>

Ahora, guarde y cierre el archivo cuando haya terminado.

Como el archivo de nuestro segundo sitio va a ser básicamente el mismo, podemos copiarlo en nuestro segundo documento de la siguiente manera:

cp /var/www/example.com/html/index.html /var/www/test.com/html/

Ahora, podemos abrir el nuevo archivo en nuestro editor:

nano /var/www/test.com/html/index.html

Modifíquelo para que se refiera a nuestro segundo dominio:

/var/www/test.com/html/index.html
<html>
    <head>
        <title>Welcome to Test.com!</title>
  </head>
  <body>
    <h1>Success!  The test.com server block is working!</h1>
    </body>
</html>

Ahora, guarde y cierre el archivo cuando haya terminado. Ahora tenemos algunas páginas para mostrar a los visitantes de nuestros dos dominios.

Paso 3. crear archivos de bloques de servidor para cada dominio

Ahora que tenemos el contenido que deseamos atender, tenemos que crear los bloques de servidor que le indicarán a Nginx cómo hacerlo.

Por defecto, Nginx contiene un bloque de servidor llamado default que podemos usar como plantilla para nuestras propias configuraciones. Comenzaremos por diseñar el primer bloque de servidores de nuestro dominio, que luego copiaremos para nuestro segundo dominio y haremos las modificaciones necesarias.

Crear el primer archivo de bloque de servidor

Como se mencionó anteriormente, crearemos nuestro primer archivo de configuración de bloque de servidor copiando sobre el archivo predeterminado:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com 

Ahora, abra el nuevo archivo que creó en su editor de texto con privilegios sudo :

sudo nano /etc/nginx/sites-available/example.com 

Ignorando las líneas comentadas, el archivo se verá similar a esto:

/etc/nginx/sites-available/example.com
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }
}

Primero, tenemos que mirar las directivas de escucha. Solo uno de nuestros bloques de servidores en el servidor puede tener habilitada la opción default_server . Esto especifica qué bloque debe atender una solicitud si el server_name solicitado no coincide con ninguno de los bloques de servidor disponibles. Esto no debería ocurrir con mucha frecuencia en escenarios del mundo real ya que los visitantes accederán a su sitio a través de su nombre de dominio.

Usted puede optar por designar a uno de sus sitios como el "default" mediante la inclusión de la default_server opción en la listen Directiva, o puede dejar el bloque de servidor por defecto está activada, el cual servirá el contenido del /var/www/html directorio si el el host solicitado no puede ser encontrado.

En esta guía, vamos a dejar el bloque de servidor predeterminado en su lugar a las solicitudes que no se corresponden servidor, por lo que vamos a eliminar el default_server de este y el siguiente bloque de servidor. Puede elegir agregar la opción a cualquiera de los bloques de servidor que tenga sentido para usted.

/etc/nginx/sites-available/example.com
server {
        listen 80;
        listen [::]:80;

        . . .
}
Nota.

Puede verificar que la opción default_server solo esté habilitada en un único archivo activo escribiendo:

grep -R default_server /etc/nginx/sites-enabled/

Si las coincidencias se encuentran sin comentario en más de un archivo (se muestra en la columna más a la izquierda), Nginx se quejará de una configuración no válida.

Lo siguiente que vamos a tener que ajustar es la root del documento, especificada por la directiva root . Apúntalo en la root del documento del sitio que creaste:

/etc/nginx/sites-available/example.com
server {
        listen 80;
        listen [::]:80;

        root /var/www/example.com/html;

}

A continuación, debemos modificar el server_name para que coincida con las solicitudes de nuestro primer dominio. Además, podemos agregar cualquier alias que deseemos. www.example.com un alias de www.example.com para demostrar.

Cuando hayas terminado, tu archivo tendrá el siguiente aspecto:

/etc/nginx/sites-available/example.com
server {
        listen 80;
        listen [::]:80;

        root /var/www/example.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name example.com www.example.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

Eso es todo lo que necesitamos para una configuración básica. Guarde y cierre el archivo para salir.

Crear el segundo archivo de bloque de servidor

Ahora que tenemos nuestra configuración inicial de bloque de servidor, podemos usar eso como base para nuestro segundo archivo. Cópielo para crear un nuevo archivo:

sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/test.com 

Abra el nuevo archivo con privilegios sudo en su editor:

sudo nano /etc/nginx/sites-available/test.com 

De nuevo, asegúrese de no utilizar la opción default_server para la directiva listen en este archivo si ya lo ha usado en otro lugar. Ajuste la directiva root para que apunte a la root del documento de su segundo dominio y ajuste el nombre del server_name para que coincida con el nombre de dominio de su segundo sitio (asegúrese de incluir cualquier alias).

Cuando termine, su archivo se verá más o menos así:

/etc/nginx/sites-available/test.com
server {
        listen 80;
        listen [::]:80;

        root /var/www/test.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name test.com www.test.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

Cuando haya finalizado, guarde y cierre el archivo.

Paso 4. habilite sus bloques de servidor y reinicie Nginx

Ahora que tenemos nuestros archivos de bloque de servidor, debemos habilitarlos. Podemos hacer esto creando enlaces simbólicos desde estos archivos al directorio sites-enabled , que Nginx lee durante el inicio.

Podemos crear estos enlaces escribiendo:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/

Estos archivos ahora están en el directorio habilitado. Ahora tenemos habilitados tres bloques de servidor, que están configurados para responder en función de su directiva de listen y el nombre de server_name (puede leer más sobre cómo Nginx procesa estas directivas aquí ):

  • example.com : Responderá a las solicitudes de example.com y www.example.com
  • test.com : Responderá a las solicitudes de test.com y www.test.com
  • default : responderá a cualquier solicitud en el puerto 80 que no coincida con los otros dos bloques.

Para evitar un posible problema de memoria de cubo de hash que puede surgir al agregar nombres de servidor adicionales, /etc/nginx/nginx.conf ajustar un solo valor dentro de nuestro archivo /etc/nginx/nginx.conf . Abra el archivo ahora:

sudo nano /etc/nginx/nginx.conf

Dentro del archivo, encuentre la directiva server_names_hash_bucket_size . Quite el símbolo # para descomentar la línea:

/etc/nginx/nginx.conf
http {
    . . .

    server_names_hash_bucket_size 64;

    . . .
}

Ahora, guarde y cierre el archivo cuando haya terminado.

A continuación, realice una prueba para asegurarse de que no haya errores de sintaxis en ninguno de sus archivos Nginx:

sudo nginx -t

Si no se encontraron problemas, reinicie Nginx para habilitar sus cambios:

sudo systemctl restart nginx

Nginx ahora debería estar sirviendo sus dos nombres de dominio.

Paso 5. modifique su archivo de hosts locales para la prueba (opcional)

Si no ha usado los nombres de dominio que posee y en su lugar ha estado utilizando valores ficticios, puede modificar la configuración de su computadora local para permitirle probar temporalmente su configuración de bloque de servidor Nginx.

Esto no permitirá que otros visitantes vean su sitio correctamente, pero le dará la posibilidad de llegar a cada sitio de manera independiente y probar su configuración. Básicamente, esto funciona interceptando solicitudes que generalmente irían al DNS para resolver nombres de dominio. En cambio, podemos establecer las direcciones IP a las que queremos que vaya nuestra computadora local cuando solicitemos los nombres de dominio.

 

Nota
Asegúrese de estar operando en su computadora local durante estos pasos y no de su servidor privado virtual. Tendrá que tener acceso de administrador, ser miembro del grupo administrativo o, de otro modo, ser capaz de editar archivos del sistema para hacer esto.

 

Si está en una computadora Mac o Linux en casa, puede editar el archivo que necesita escribiendo:

sudo nano /etc/hosts

Si está en Windows, puede encontrar instrucciones para modificar su archivo de hosts aquí.

Debe conocer la dirección IP pública de su servidor y los dominios que desea enrutar al servidor. Suponiendo que la dirección IP pública de mi servidor es 203.0.113.5 , las líneas que agregaría a mi archivo se verían así:

/etc/hosts
127.0.0.1   localhost
. . .

203.0.113.5 example.com www.example.com 203.0.113.5 test.com www.test.com

Esto interceptará cualquier solicitud de example.com y test.com y los enviará a su servidor, que es lo que queremos si no poseemos realmente los dominios que estamos usando.

Ahora, guarde y cierre el archivo cuando haya terminado.

Paso 6. prueba tus resultados

Ahora que ya está todo configurado, debe probar que sus bloques de servidor están funcionando correctamente. Puede hacerlo visitando los dominios en su navegador web:

http://example.com 

Debería ver una página que se parece a esto:

Configurar los Bloques del Servidor de Nginx hosts virtuales en Ubuntu 16.04 3

Si visita su segundo nombre de dominio, debería ver un sitio ligeramente diferente:

http://test.com 

Configurar los Bloques del Servidor de Nginx hosts virtuales en Ubuntu 16.04 4

Si ambos sitios funcionan, ha configurado con éxito dos bloques de servidores independientes con Nginx.

En este punto, si ajustó su archivo hosts en su computadora local para realizar la prueba, probablemente quiera eliminar las líneas que agregó.

 

Conclusión

Ahora debería tener la capacidad de crear bloques de servidor para cada dominio que desee alojar desde el mismo servidor. No existen límites reales en la cantidad de bloques de servidores que puede crear, siempre que su hardware pueda manejar el tráfico.

Fuente. Artículo traducido y con muy ligeras modificaciones de: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian

licencia creative common
Este trabajo está licenciado por Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Sobre el Autor
Pipe Peña
Author: Pipe Peña
Soy un loco enamorado de la vida. Licenciado en Ciencias Sociales y Humanas, amante de la informática y la astrofísica. Me gusta crear e investigar proyectos que enriquezcan la construcción y desarrollo del conocimiento individual y colectivo. Me encantan los videojuegos, el cine, la química, matemáticas, la física cuántica y la música, en donde actualmente soy compositor. Me baso en la idea que toma Baruch Spinoza sobre Dios.

Imprimir


Comentar este artículo en los foros (2 respuestas).
Publicado: 4 años 10 meses ago por JOSUÉ IVÁN JAIMES PÉREZ #1096
Avatar de JOSUÉ IVÁN JAIMES PÉREZ
ME GUSTARIA VER UNA PAGINA CREADA CON NGINX DESDE INTERNET NO SOLO DE FORMA LOCAL
Publicado: 4 años 10 meses ago por JOSUÉ IVÁN JAIMES PÉREZ #1095
Avatar de JOSUÉ IVÁN JAIMES PÉREZ
HOLA, EXCELENTE, PUDE INSTALAR, AHORA COMO LE HAGO PARA VERLO DESDE INTERNET??

AGRADECERIA BASTANTE EL APORTE.