Gestione predefinita per domini / sottodomini senza pari in Apache


12

Ho una configurazione Apache2 con più VirtualHosts. Il mio DNS è impostato per accettare *.<domain>.<tld>su più domini. Tutto funziona correttamente, ma se vado a something-random-here.example.comme sembra che venga selezionato un VirtualHost non valido (sto indovinando il primo o l'ultimo che trova). C'è un modo per dire ad Apache di usare determinate regole se nessuna delle voci di VirtualHost corrisponde al dominio o al sottodominio? Preferirei restituire un 404.

Risposte:


12

Apache utilizza il primo virtualhost se nessun nome corrisponde. Basta configurare un nuovo virtualhost come il primo con un nome casuale, mostrando quello che ti piace o restituendo una pagina 404.


Grazie ma potresti per favore elaborare? Non riesco a farlo funzionare.
Ryall,

2
Come sono disposti i file di configurazione di apache2? O quale sistema operativo usi? Apache legge la configurazione in un determinato ordine e il primo VirtualHost che vede è quello predefinito. Riceve tutto il traffico da nomi host sconosciuti. Quindi se hai un singolo file di configurazione, il primo VirtualHost è quello. Se ne hai diversi, come sulla maggior parte dei Linux, potrebbe essere quello chiamato 0default o giù di lì ...
Moritz Entrambi

Ho inserito alcune configurazioni predefinite in ports.conf. Non funzionava perché ho cercato di abbinare *: 80 quando stavo usando <ip>: 80 sui miei virtualhosts. Invece ho dovuto creare una voce predefinita separata per ogni IP e ora funziona.
Ryall,

Non viene utilizzato il mio primo o ultimo file v-host. Penso che Apache sia cambiato.
Cobolt,

4

I caratteri jolly includono i file di configurazione del tuo sito:

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

Organizza i file di configurazione del tuo sito in modo che vengano caricati nell'ordine previsto. Esempio...

01-httpd.conf

02-site1-httpd.conf

03-site2-httpd.conf

eccetera...

Apache li leggerà in ordine. Quindi creane uno che verrà sempre caricato per ultimo per catturare eventuali host virtuali senza pari e restituire un 404 invece di caricare un sito predefinito.

99-catchall-httpd.conf

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

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

Assicurati di sostituire le porte con qualsiasi porta su cui ascolti httpd. Oppure, se hai httpd in ascolto su interfacce specifiche, dovrai invece aggiungere una catchall per ogni interfaccia, in questo modo:

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

Spero che sia di aiuto. Uso questo metodo per caricare i siti nell'ordine specificato e impedire agli host virtuali senza pari di caricare involontariamente un sito imprevisto.


"ServerAlias ​​*" non dovrebbe essere rimosso dalle regole generali?
Ahm3d, detto il

Suppongo che non importerebbe. Se nessuno degli host virtuali precedenti alla catchall gestisce la richiesta, questi restituiranno una risposta 404. Non vedo il motivo per cui ServerAlias ​​* dovrebbe essere rimosso, ma potrebbero essere inutilmente specifici.
Jason Slobotski il

0

Come Moritz Bothaccennato, Apache2 utilizzerà il primo host virtuale che trova se non corrisponde a quello richiesto.

Quando installi Apache2 per la prima volta, c'è un sito Web predefinito conf che puoi usare come modello, modificare o eliminare, e mi chiedevo sempre a cosa servisse effettivamente 000-default.conf, perché avevano anche default.conf. Dopo aver letto quello che ha Moritz Bothdetto, ora tutto ha più senso.

Quello che ho fatto per il mio server è stato copiare la configurazione per il nome host predefinito (sito Web) nel file 000-default.conf e a2ensite 000-default.

Ora, ogni volta che c'è una richiesta di dominio senza eguali sul mio sito Web, serve la pagina 000-default, che è solo una copia della mia pagina predefinita effettiva.


1
Faccio lo stesso, ma il mio host non corrispondente / predefinito invia un reindirizzamento al sito di livello superiore appropriato che modifica anche l'URL visualizzato con quello corretto.
Ivanivan,

Questa è davvero un'ottima idea! Non ci ho pensato. Sicuramente implementerò il mio sito in questo modo :)
Newteq Developer il

Per qualche motivo, non riesco a reindirizzare il mio ssl (pagina predefinita). Ho <VirtualHost *:443> ... Redirect / https://baseurl/ ... </VirtualHost> ma l'URL rimane lo stesso. Ho fatto lo stesso per la versione non ssl e reindirizza correttamente. Qualche idea?
Newteq Developer il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.