Hacer que el servidor Apache solo acepte solicitudes de dominio en lugar de IP


9

Tengo un servidor CentOS que ejecuta Apache 2.2.15. Si la dirección IP del servidor es 198.51.100.4 y escribo en el navegador http://198.51.100.4 , va a mi sitio web.

Quiero evitar esto Quiero que mi sitio web sea accesible solo en el FQDN, es decir, http://example.com/ .

¿Cómo puedo configurar mi servidor para que el sitio web no sea accesible cuando visito la dirección IP?



Si bien la pregunta no coincide con el duplicado al que me he vinculado, la respuesta a esa pregunta también es la respuesta a esta.
Jenny D

Tengo curiosidad por saber por qué harías eso. DNS inverso es una cosa.
njzk2

Respuestas:


7

Puede usar Alias *para atrapar cualquier otro tráfico que no sea el permitido en su host virtual, para esto debe usar en la última posición un host virtual con *alias.

Al igual que solo se servirá el dominio definido.

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

En mi ejemplo, solo se permitirá mywebsite.com y another.mywebsite.com, todos los demás dominios o IP tendrán tráfico cancelado.

Para cancelar el tráfico, puede usar una redirección -y luego agregar un código de error, por ejemplo, utilicé una RewriteRule para redirigir a 406 No aceptable ( R=406).

Aquí puede encontrar la lista de códigos de redireccionamiento: https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP


¡Gracias! Probé tu método y funciona. Pero cambié un poco. Creé un nuevo host virtual y puse como ServerName la dirección IP del servidor + RewriteRule :)
antiks

11

Puede agregar un host virtual predeterminado que solo dé un error "denegado", o lo que sea. Cuando el navegador y luego viene a su servidor web sin un huésped en el URL que coincide con cualquiera ServerNameo ServerAliaslíneas en otras máquinas virtuales será servido por el anfitrión virtual predeterminado.

Entonces, en su configuración de apache:

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

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

1

Necesita una regla de reescritura como esta:

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

Esto no hace lo que pidió el OP.
Carreras de ligereza en órbita
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.