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:
- Cómo Instalar Nginx en Ubuntu 16.04 Utilice este tutorial para configurar Nginx por sí mismo.
- Cómo Instalar Linux, Nginx, MySQL y PHP (LEMP) en Ubuntu 16.04 Utilice este tutorial si va a utilizar Nginx junto con MySQL y PHP.
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
.
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í:
<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:
<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:
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.
server {
listen 80;
listen [::]:80;
. . .
}
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:
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:
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í:
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 deexample.com
ywww.example.com
test.com
: Responderá a las solicitudes detest.com
ywww.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:
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.
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í:
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:
Si visita su segundo nombre de dominio, debería ver un sitio ligeramente diferente:
http://test.com
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