Red Hat Training

A Red Hat training course is available for RHEL 8

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 y example.net a la dirección IP del servidor web.

    Tenga en cuenta que debe añadir manualmente estas entradas a su servidor DNS.

Procedimiento

  1. Edite el archivo /etc/nginx/nginx.conf:

    1. 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 bloque server al bloque http 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 puerto 80 en todas las direcciones IPv4 e IPv6. El parámetro default_server indica que NGINX utiliza este bloque server 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 bloque server. Establecer server_name a _ configura a NGINX para aceptar cualquier nombre de host para este bloque server.
      • La directiva root establece la ruta del contenido web para este bloque server.
    2. Añade un bloque similar server para el dominio example.com al bloque http:

      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.
    3. Añade un bloque similar server para el dominio example.net al bloque http:

      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;
      }
  2. Cree los directorios raíz de ambos dominios:

    # mkdir -p /var/www/example.com/
    # mkdir -p /var/www/example.net/
  3. 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 de restorecon.

  4. Cree los directorios de registro para ambos dominios:

    # mkdir /var/log/nginx/example.com/
    # mkdir /var/log/nginx/example.net/
  5. Reinicie el servicio nginx:

    # systemctl restart nginx

Pasos de verificación

  1. 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
  2. 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.
  3. 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.
  4. 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.