configuracion de virtualhost nginx

19 de feb. de 2018

hola a todo hoy hablo sobre lo que es la configuracion de virtualhost en nginx, veremos ejemplos como son los virtualhost en nginx.

Introducción nginx
bueno 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 esta guía, analizaremos cómo configurar bloques de servidor en Nginx en un servidor Ubuntu - server 16.04.

Requerimiento previos
Vamos a utilizar un usuario no root con sudo privilegios a lo largo de este tutorial.

También necesitará tener Nginx instalado en su servidor.

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 esta guía son example.com y test.com .

Puede encontrar una guía sobre cómo configurar nombres de dominio con DigitalOcean aquí . 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 paso: configurar nuevos directorios raíz 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 /var/www/html directorio 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 /var/www de cada uno de nuestros sitios. El contenido web real se colocará en un htmldirectorio 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 html directorio si es necesario.

Necesitamos crear estos directorios para cada uno de nuestros sitios. La -p bandera le dice mkdir que cree los directorios principales 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á escribir a ellos sin sudo.

Nota
Dependiendo de sus necesidades, es posible que deba ajustar los permisos o la propiedad de las carpetas nuevamente para permitir cierto acceso al www-data usuario. 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 $USERvariable del entorno 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 raíces web deberían ser correctos si no ha modificado su umask valor, pero podemos asegurarnos escribiendo:

sudo chmod -R 755 /var/www

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

Paso dos: 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 index.html archivo 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>Bienvenido a ejemplo.com!</title>
    </head>
    <body>
        <h1>Todo bien!  el ejemplo.com del bloque de servidor esta correcto!</h1>
    </body>
</html>

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>Bienvenido a test.com!</title>
    </head>
    <body>
        <h1>exito!  test.com bloque de servidor trabajando!</h1>
    </body>
</html>

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

Paso tres: 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 sudo privilegios:

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 servidor en el servidor puede tener la default_server opción habilitada. Esto especifica qué bloque debe servir una solicitud si el server_name pedido 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.

Puede elegir designar uno de sus sitios como "predeterminado" al incluir la default_serveropción en la listen directiva, o puede dejar el bloque de servidor predeterminado habilitado, que servirá el contenido del /var/www/html directorio si no se puede encontrar el host solicitado.

En esta guía, dejaremos el bloque de servidor predeterminado en su sitio para las solicitudes de no coincidencia del servidor, por lo que eliminaremos el default_serverde 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 default_serveropción 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 raíz del documento, especificada por la root directiva. Apúntalo a la raíz 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 las server_namesolicitudes para que coincidan con nuestro primer dominio. Además, podemos agregar cualquier alias que deseemos. Añadiremos un www.example.com alias 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 sudo privilegios en su editor:

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

De nuevo, asegúrese de no utilizar la default_serveropción para la listen directiva en este archivo si ya lo ha utilizado en otro lugar. Ajuste la root directiva para que apunte a la raíz del documento de su segundo dominio y ajústela server_namepara 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 terminado, guarde y cierre el archivo.

Paso cuatro: 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 sites-enableddirectorio, 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 listen directiva y server_name (puede leer más sobre cómo Nginx procesa estas directivas aquí ):

example.com: Responderá a las solicitudes para example.com y www.example.com

test.com: Responderá a las solicitudes para 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, procederemos a ajustar un único valor dentro de nuestro /etc/nginx/nginx.conf archivo. Abra el archivo ahora:

sudo nano /etc/nginx/nginx.conf

Dentro del archivo, encuentra la server_names_hash_bucket_sizedirectiva. Elimine el #símbolo para descomentar la línea:

/etc/nginx/nginx.conf

http {
    . . .

    server_names_hash_bucket_size 64;

    . . .
}

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 cinco: 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 VPS. 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

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 lo test.com enviará a su servidor, que es lo que queremos si no poseemos los dominios que estamos usando.

Guarde y cierre el archivo cuando haya terminado.

Paso seis: 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:

Nginx primer bloque de servidor

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

http://test.com

Nginx segundo bloque de servidor

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

En este punto, si ajustó su hosts archivo en su computadora local para realizar la prueba, es probable que desee 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.

bueno eso es todo sobre este post de virtualhost nginx hasta otro post.

¿Te gustó el contenido o lo que hacemos? ¡Cualquier colaboración es agradecida para mantener los servidores o crear proyectos!

Owen-Wilson

Siempre Aprendiendo de uno mismo y de los demás !!

Comentarios:

¡Genial! Te has suscrito con éxito.
¡Genial! Ahora, completa el checkout para tener acceso completo.
¡Bienvenido de nuevo! Has iniciado sesión con éxito.
Éxito! Su cuenta está totalmente activada, ahora tienes acceso a todo el contenido.