2.2. Configurar NGINX como un servidor web que proporciona diferentes contenidos para diferentes dominios
Por defecto, NGINX actúa como un servidor web que proporciona el mismo contenido a los clientes para todos los nombres de dominio asociados a las direcciones IP del servidor. Este procedimiento explica cómo configurar NGINX:
-
Para servir peticiones al dominio
example.com
con contenido del directorio/var/www/example.com/
-
Para servir peticiones al dominio
example.net
con contenido del directorio/var/www/example.net/
-
Servir todas las demás solicitudes, por ejemplo, a la dirección IP del servidor o a otros dominios asociados a la dirección IP del servidor, con contenido del directorio
/usr/share/nginx/html/
Requisitos previos
- NGINX se instala como se describe en Sección 2.1, “Instalación y preparación de NGINX”.
Los clientes y el servidor web resuelven el dominio
example.com
yexample.net
a la dirección IP del servidor web.Tenga en cuenta que debe añadir manualmente estas entradas a su servidor DNS.
Procedimiento
Edite el archivo
/etc/nginx/nginx.conf
:Por defecto, el archivo
/etc/nginx/nginx.conf
ya contiene una configuración de tipo catch-all. Si ha eliminado esta parte de la configuración, vuelva a añadir el siguiente bloqueserver
al bloquehttp
del archivo/etc/nginx/nginx.conf
:server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; }
Estos ajustes configuran lo siguiente:
-
La directiva
listen
define qué dirección IP y qué puertos escucha el servicio. En este caso, NGINX escucha en el puerto80
en todas las direcciones IPv4 e IPv6. El parámetrodefault_server
indica que NGINX utiliza este bloqueserver
por defecto para las peticiones que coincidan con las direcciones IP y los puertos. -
El parámetro
server_name
define los nombres de host de los que es responsable este bloqueserver
. Establecerserver_name
a_
configura a NGINX para aceptar cualquier nombre de host para este bloqueserver
. -
La directiva
root
establece la ruta del contenido web para este bloqueserver
.
-
La directiva
Añade un bloque similar
server
para el dominioexample.com
al bloquehttp
:server { server_name example.com; root /var/www/example.com/; access_log /var/log/nginx/example.com/access.log; error_log /var/log/nginx/example.com/error.log; }
-
La directiva
access_log
define un archivo de registro de acceso independiente para este dominio. -
La directiva
error_log
define un archivo de registro de errores separado para este dominio.
-
La directiva
Añade un bloque similar
server
para el dominioexample.net
al bloquehttp
:server { server_name example.net; root /var/www/example.net/; access_log /var/log/nginx/example.net/access.log; error_log /var/log/nginx/example.net/error.log; }
Cree los directorios raíz de ambos dominios:
#
mkdir -p /var/www/example.com/
#mkdir -p /var/www/example.net/
Establezca el contexto
httpd_sys_content_t
en ambos directorios raíz:#
semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com(/.*)?"
#restorecon -Rv /var/www/example.com/
#semanage fcontext -a -t httpd_sys_content_t "/var/www/example.net(/.\*)?"
#restorecon -Rv /var/www/example.net/
Estos comandos establecen el contexto
httpd_sys_content_t
en los directorios/var/www/example.com/
y/var/www/example.net/
.Tenga en cuenta que debe instalar el paquete
policycoreutils-python-utils
para ejecutar los comandos derestorecon
.Cree los directorios de registro para ambos dominios:
#
mkdir /var/log/nginx/example.com/
#mkdir /var/log/nginx/example.net/
Reinicie el servicio
nginx
:#
systemctl restart nginx
Pasos de verificación
Cree un archivo de ejemplo diferente en la raíz de documentos de cada host virtual:
#
echo "Content for example.com" > /var/www/example.com/index.html
#echo "Content for example.net" > /var/www/example.net/index.html
#echo "Catch All content" > /usr/share/nginx/html/index.html
-
Utilice un navegador y conéctese a
http://example.com
. El servidor web muestra el contenido de ejemplo del archivo/var/www/example.com/index.html
. -
Utilice un navegador y conéctese a
http://example.net
. El servidor web muestra el contenido de ejemplo del archivo/var/www/example.net/index.html
. -
Utilice un navegador y conéctese a
http://IP_address_of_the_server
. El servidor web muestra el contenido de ejemplo del archivo/usr/share/nginx/html/index.html
.