Tengo una configuración de Apache2 con múltiples VirtualHosts. Mi DNS está configurado para aceptar *.<domain>.<tld>
en múltiples dominios. Todo funciona correctamente, pero si voy a, something-random-here.example.com
parece que se selecciona un VirtualHost no válido (supongo que es el primero o el último que encuentra). ¿Hay alguna manera de decirle a Apache que use ciertas reglas si ninguna de las entradas de VirtualHost coincide con el dominio o subdominio? Preferiblemente me gustaría devolver un 404.
Respuesta1
Apache usa el primer host virtual si ningún nombre coincide. Simplemente configure un nuevo host virtual como el primero con un nombre aleatorio, mostrando lo que quiera o devolviendo una página 404.
Respuesta2
El comodín incluye los archivos de configuración de su sitio:
Include path/to/site/confs/*httpd.conf
Organice los archivos de configuración de su sitio para que se carguen en el orden esperado. Ejemplo...
01-httpd.conf
02-sitio1-httpd.conf
03-sitio2-httpd.conf
etc...
Apache los leerá en orden. Luego cree uno que siempre se cargue en último lugar para detectar cualquier host virtual no coincidente y devolver un 404 en lugar de cargar un sitio predeterminado.
99-catchall-httpd.conf
<VirtualHost *:8080>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost *:8443>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
Asegúrese de reemplazar los puertos con cualquier puerto en el que escuche su httpd. O si tienes httpd escuchando en interfaces específicas, necesitarás agregar un comodín para cada interfaz, así:
<VirtualHost 192.168.1.101:8080>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.101:8443>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.102:8080>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.102:8443>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
Espero que esto ayude. Utilizo este método para cargar sitios en el orden que especifico y evito que hosts virtuales no coincidentes carguen un sitio inesperado sin querer.
Respuesta3
Como Moritz Both
se menciona, Apache2 utilizará el primer host virtual que encuentre si no coincide con ninguno de los que haya solicitado.
Cuando instalas Apache2 por primera vez, hay una configuración de sitio web predeterminada que puedes usar como plantilla, modificar o eliminar, y siempre me preguntaba para qué servía realmente 000-default.conf, porque también tenían un default.conf. Después de leer lo Moritz Both
dicho, ahora todo tiene más sentido.
Lo que hice para mi servidor fue copiar la configuración del nombre de host predeterminado (sitio web) al archivo 000-default.conf y a2ensite 000-default
.
Ahora, cada vez que hay una solicitud de dominio no coincidente para mi sitio web, muestra la página predeterminada 000, que es solo una copia de mi página predeterminada real.