Tenía producción (www.myexample.com) y desarrollo (dev.myexample.com) en un solo servidor, usando bloques de servidor y directorios separados, y ambos escuchando en el puerto 80. Esto funcionó bien.
Ahora instalé el certificado SSL y habilité el modo SSL en el archivo de configuración del sitio. Al mismo tiempo, cambié el puerto de escucha de 80 a 443, por lo que el sitio no debería responder en el puerto 80, sólo en el puerto 443. El sitio de desarrollo sigue funcionando como estaba.
Ahora parece que en lugar de un error, aparece el sitio de desarrollo cuando me conecto ahttp://www.miejemplo.com.
Para solucionar este problema, agregué un bloque de servidor "predeterminado" real (nombre_servidor establecido en _) y apunté a un directorio que no contiene archivos.
¿Existe una mejor manera? Si quiero un sitio web predeterminado real, no quiero que se muestre para un nombre de host conocido. Supongo que tengo que crear un servidor que bloquee la escucha de www.myexaple.com:80 y configurarlo para que de alguna manera rechace todas las solicitudes de página, pero ¿cómo?
¿Cómo puedo dejar de responder por completo a cualquier solicitud de un sitio que no tengo alojado?
Respuesta1
Siempre es una buena idea configurar un servidor predeterminado con un nombre de host no válido, esto asegura que los clientes sin ningún campo de encabezado de host establecido (o con un host que no haya configurado) sean rechazados.
server {
listen [::]:80 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k;
server_name _;
return 403;
}
server {
listen [::]:443 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k spdy ssl;
server_name _;
ssl_certificate certificates/_/pem;
ssl_certificate_key certificates/_/key;
return 403;
}
Como puede ver, regreso con un código de estado de acceso prohibido 403, ya que este es el más apropiado para mi caso de uso (ver comentario a continuación). Si simplemente no desea devolver absolutamente nada, utilice el código nginx especial 444.