Gestion par défaut des domaines / sous-domaines inégalés dans Apache

12

J'ai une configuration Apache2 avec plusieurs VirtualHosts. Mon DNS est configuré pour accepter *.<domain>.<tld>sur plusieurs domaines. Tout fonctionne correctement, mais si j'y vais, something-random-here.example.comil semble que je sélectionne un VirtualHost invalide (je devine le premier ou le dernier qu'il trouve). Existe-t-il un moyen de dire à Apache d'utiliser certaines règles si aucune des entrées VirtualHost ne correspond au domaine ou au sous-domaine? J'aimerais de préférence retourner un 404.

Ryall
la source

Réponses:

12

Apache utilise le premier virtualhost si aucun nom ne correspond. Configurez simplement un nouvel hôte virtuel comme le premier avec un nom aléatoire, affichant ce que vous voulez - ou renvoyant une page 404.

Moritz Both
la source
Merci mais pourriez-vous s'il vous plaît développer? Je ne peux pas faire fonctionner ça.
Ryall
2
Comment sont disposés vos fichiers de configuration apache2? Ou quel système d'exploitation utilisez-vous? Apache lit la configuration dans un certain ordre, et le premier VirtualHost qu'il voit est celui par défaut. Il reçoit tout le trafic provenant de noms d'hôtes inconnus. Donc, si vous avez un seul fichier de configuration, le premier VirtualHost est celui-ci. Si vous en avez plusieurs, comme sur la plupart des linux, ce peut être celui qui s'appelle 0 par défaut ou alors ...
Moritz Both
J'ai mis quelques configurations par défaut dans le ports.conf. Cela ne fonctionnait pas car j'ai essayé de faire correspondre *: 80 lorsque j'utilisais <ip>: 80 sur mes hôtes virtuels. Au lieu de cela, j'ai dû créer une entrée par défaut distincte pour chaque IP et cela fonctionne maintenant.
Ryall le
Ni mon premier ni mon dernier fichier d'hôte virtuel n'est utilisé. Je pense qu'apache a changé.
Cobolt
4

Les caractères génériques incluent les fichiers de configuration de votre site:

Include path/to/site/confs/*httpd.conf

Organisez vos fichiers de configuration de site afin qu'ils soient chargés dans un ordre attendu. Exemple...

01-httpd.conf

02-site1-httpd.conf

03-site2-httpd.conf

etc...

Apache les lira dans l'ordre. Ensuite, créez-en un qui se chargera toujours en dernier pour attraper les hôtes virtuels sans correspondance et retourner un 404 au lieu de charger un site par défaut.

99-catchall-httpd.conf

<VirtualHost *:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

Assurez-vous de remplacer les ports par les ports sur lesquels votre httpd écoute. Ou si vous avez httpd à l'écoute sur des interfaces spécifiques, vous devrez plutôt ajouter un catchall pour chaque interface, comme ceci:

<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>

J'espère que cela t'aides. J'utilise cette méthode pour charger les sites dans l'ordre que je spécifie et empêcher les hôtes virtuels inégalés de charger involontairement un site inattendu.

Jason Slobotski
la source
"ServerAlias ​​*" ne doit-il pas être supprimé des règles fourre-tout?
Ahm3d Dit le
Je suppose que cela n'aurait pas d'importance. Si aucun des hôtes virtuels avant le catchall ne gère la demande, ceux-ci renverront une réponse 404. Je ne vois pas de raison pour laquelle ServerAlias ​​* devrait être supprimé, mais ils peuvent être inutilement spécifiques.
Jason Slobotski
0

Comme Moritz Bothmentionné, Apache2 utilisera le premier hôte virtuel qu'il trouve s'il ne correspond pas à celui que vous avez demandé.

Lorsque vous installez Apache2 pour la première fois, il existe un site Web par défaut que vous pouvez utiliser comme modèle, modifier ou supprimer, et je me demandais toujours à quoi servait le fichier 000-default.conf, car ils avaient également un fichier default.conf. Après avoir lu ce qui a été Moritz Bothdit, tout cela a plus de sens maintenant.

Ce que j'ai fait pour mon serveur a été de copier la configuration du nom d'hôte par défaut (site Web) dans le fichier 000-default.conf et a2ensite 000-default.

Maintenant, chaque fois qu'il y a une demande de domaine inégalée sur mon site Web, il sert la page 000 par défaut, qui n'est qu'une copie de ma page par défaut réelle.

Développeur Newteq
la source
1
Je fais de même, mais mon hôte non apparié / par défaut envoie une redirection vers le site de premier niveau approprié qui modifie également l'URL affichée en la bonne.
ivanivan
C'est vraiment une super idée! Je n'y ai pas pensé. Je vais certainement implémenter mon site comme ça :)
Développeur Newteq
Pour une raison quelconque, je n'arrive pas à faire rediriger mon SSL (page par défaut). J'ai, <VirtualHost *:443> ... Redirect / https://baseurl/ ... </VirtualHost> mais l'URL reste la même. J'ai fait la même chose pour la version non SSL et elle redirige correctement. Des idées?
Développeur Newteq