Fai in modo che il server Apache accetti solo richieste di dominio anziché IP


9

Ho un server CentOS con Apache 2.2.15. Se l'indirizzo IP del server è 198.51.100.4 e scrivo nel browser http://198.51.100.4 , va sul mio sito Web.

Voglio impedirlo. Voglio che il mio sito Web sia accessibile solo sul nome di dominio completo, ad esempio http://esempio.com/ .

Come posso configurare il mio server in modo che il sito Web non sia accessibile quando visito l'indirizzo IP?



Mentre la domanda non corrisponde esattamente al duplicato a cui ho collegato, la risposta a quella domanda è anche la risposta a questa.
Jenny D,

Sono curioso di sapere perché lo faresti. DNS inverso è una cosa.
njzk2,

Risposte:


7

Puoi usare Alias *per catturare qualsiasi altro traffico diverso da quello consentito nel tuo host virtuale, per questo devi usare nell'ultima posizione un host virtuale *come alias.

In questo modo verrà offerto solo il dominio definito.

<VirtualHost *:80>
ServerName mywebsite.com
DocumentRoot /var/www/default
...
</VirtualHost>

<VirtualHost *:80>
ServerName another.mywebsite.com
DocumentRoot /var/www/another
...
</VirtualHost>

# /!\ THIS HAS TO BE ON THE LAST POSITION /!\
<VirtualHost *:80 *:443>
# [ Server Domain ]
ServerName localhost
ServerAlias *
# [ Cancel trafic ]
RewriteRule .* - [END,R=406]
# [ Custom Log ]
CustomLog ${APACHE_LOG_DIR}/other.log combined
</VirtualHost>

Nel mio esempio saranno consentiti solo mywebsite.com e another.mywebsite.com, tutti gli altri domini o IP saranno cancellati.

Per annullare il traffico è possibile utilizzare un reindirizzamento -e quindi aggiungere un codice di errore, ad esempio ho usato una RewriteRule per reindirizzare a 406 Not Acceptable ( R=406).

Qui puoi trovare l'elenco dei codici di reindirizzamento: https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP


Grazie! Ho provato il tuo metodo e funziona. Ma sono cambiato un po '. Ho creato un nuovo virtualhost e ho inserito come ServerName l'indirizzo IP del server + RewriteRule :)
antiks

11

È possibile aggiungere un host virtuale predefinito che genera un errore "negato" o qualsiasi altra cosa. Quando un browser arriva al tuo server web senza un host nell'URL che corrisponde a uno ServerNameo alle ServerAliaslinee in altri host virtuali, verrà servito dall'host virtuale predefinito.

Quindi nella tua configurazione di Apache:

<VirtualHost *:80>
    ServerName default
    DocumentRoot /var/www/default
    ...
</VirtualHost>

<VirtualHost *:80>
    ServerName mywebsite.com
    ...
</VirtualHost>

1

È necessaria una regola di riscrittura come questa:

 RewriteEngine On
 RewriteCond %{HTTP_HOST} !^mywebsite.com$
 RewriteRule /.* https://mywebsite.com/ [R]

Ciò non fa ciò che l'OP ha richiesto.
Razze di leggerezza in orbita
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.