Configurar un servidor web virtual en Nginx y Apache

Escrito por picodotdev el .
planeta-codigo web
Enlace permanente Comentarios

La función básica de un servidor web es devolver al navegador los recursos estáticos de un sitio web como son las páginas HTML, hojas de estilo CSS, imágenes o archivos de JavaScript. Pero también pueden hacer otras funciones muy útiles como son la de proxy entre en navegador y la aplicación de backend que genera el contenido dinámico, terminación de protocolo de seguridad con la que el navegador se comunica con el servidor web usando el protocolo seguro HTTPS pero el servidor web se comunica con la aplicación backend usando el protocolo HTTP, añadir autenticación básica a ciertas rutas o utilizar el protocolo HTTP/2.

Los servidores web no requieren una capacidad de cómputo elevada, para aprovechar al máximo la capacidad e una máquina y para no requerir un servidor web por cada sitio web se utilizan los servidores web virtuales. Un servidor web virtual es un servidor web que sirve el contenido de un sitio web normalmente asociado a un nombre de dominio aunque también es posible estar asociado a una dirección IP. Por ejemplo, empleando servidores web virtuales la misma instancia de servidor web puede servir el contenido de varios sitios web diferentes como site1.127.0.0.1.xip.io, site2.127.0.0.1.xip.io y site3.127.0.0.1.xip.io. El servidor web obtiene el nombre del dominio por el que es accedido y determina el servidor web al que redirigir la solicitud.

En cada servidor web virtual se puede configurar HTTPS y HTTP/2 para lo que es necesario generar un certificado autofirmado con el nombre del dominio.

En el ejemplo se usa un contenedor de Docker de modo que para probar los ejemplos no sea necesario instalar Nginx ni Apache.

Configurar un servidor web virtual en Nginx

En el servidor web Nginx añadir un servidor web virtual consiste en añadir la configuración del sitio web en el directorio /etc/nginx/conf.d. La directiva relevante es server_name que asocia el servidor web virtual con el nombre del dominio. En base al nombre del dominio por el que se accede al servidor web se utiliza su configuración.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
server {
    listen 80;
    server_name www.127.0.0.1.xip.io;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

nginx-www.127.0.0.1.xip.io.conf
1
2
3
4
#!/usr/bin/env bash
docker run --rm -p 80:80 \
  -v `pwd`/nginx-www.127.0.0.1.xip.io.conf:/etc/nginx/conf.d/www.127.0.0.1.xip.io.conf:ro \
  nginx:latest
docker-nginx.sh

En el ejemplo se accede al sitio web por su nombre de dominio www.127.0.0.1.xip.io, usando el servidor de nombres xip.io que permite asociar un nombre de dominio a una dirección IP privada en este caso la dirección 127.0.0.1 que identifica a la propia máquina anfitrión.

Algunas distribuciones permiten añadir la configuración de los sitios web en los directorios /etc/nginx/sites-available, /etc/nginx/sites-enabled, /etc/apache2/sites-available, /etc/apache2/sites-enabled en el caso de las imágenes de Docker tanto para Nginx como para Apache estos directorios no están configurados por defecto.

En el ejemplo se usa la misma raíz de documentos que el sitio web para localhost, si se añaden archivos de contenido en una raíz de documentos propia para el servidor web virtual el contenido devuelto cambia o si cambia la raíz de documentos al directorio /usr/share/nginx que Nginx no tiene permitido el acceso se observa que cuando se accede al servidor por el nombre del dominio localhost se muestra la página de inicio y cuando se accede por el nombre del dominio www.127.0.0.1.xip.io se devuelve un error HTTP 403 Forbidden por falta de permisos.

Servidor web virtual en Nginx

Configurar un servidor web virtual en Apache HTTPD

En el servidor web Apache HTTPD un servidor web virtual se configura con sus propias directivas que igualmente indican el nombre del dominio asociado al servidor web y la ruta raíz de los recursos estáticos. Dependiendo del nombre del dominio por el que se accede al servidor web, se utiliza su configuración.

1
2
3
4
5
6
7
8
9
<VirtualHost *:80>
    ServerName wwww.127.0.0.1.xip.io
    DocumentRoot "/usr/local/apache2/htdocs"
 
    <Directory /usr/local/apache2/htdocs>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>
</VirtualHost>
httpd-vhosts.conf
1
2
3
4
5
#!/usr/bin/env bash
docker run --rm -p 80:80 \
  -v `pwd`/httpd.conf:/usr/local/apache2/conf/httpd.conf:ro \
  -v `pwd`/httpd-vhosts.conf:/usr/local/apache2/conf/extra/httpd-vhosts.conf:ro \
  httpd:alpine
docker-apache.sh

Usando Apache también se accede al sitio web por su nombre de dominio www.127.0.0.1.xip.io.

Servidor web virtual en Apache

El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub y probarlo en tu equipo ejecutando siguiente comando:
./docker-nginx.sh, ./docker-apache.sh

Comparte el artículo: