nginx 302 redirige solo IP desnuda

nginx 302 redirige solo IP desnuda

Estoy intentando configurar una redirección 302 si alguien ingresa la dirección IP, pero 301 todas las demás solicitudes al subdominio www.de ese dominio.

server {
    listen 198.251.86.133:80;
    server_name 198.251.86.133;
    return 302 http://www.jacobdevans.com/anycast-301/;
}

server {
    listen 198.251.86.133:80;
    server_name _;
    return 301 http://www.$host$request_uri;
}

Tengo el 301 funcionando, excepto si pongo la sección 302 anterior, mi esperanza es permitir que cualquier persona (que no sea https, lo siento) pueda apuntar su dominio raíz de registro A a algún lugar fácil de hacer 301, ejemplo.com a www. .ejemplo.com

Actualmente, todo queda captado por la primera opción de escucha.

# curl -I jacobdevans.com
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.6.3
Date: Mon, 28 Sep 2015 20:08:45 GMT
Content-Type: text/html
Content-Length: 160
Connection: keep-alive
Location: http://www.jacobdevans.com/anycast-301/

# curl -I 198.251.86.133
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.6.3
Date: Mon, 28 Sep 2015 20:08:56 GMT
Content-Type: text/html
Content-Length: 160
Connection: keep-alive
Location: http://www.jacobdevans.com/anycast-301/

http://www.redirect-checker.orgsacaré de mi ubicación en Luxemburgo

¡Gracias!

Respuesta1

Necesitaría tener un único bloque de servidor ya que ambos no se leerán mientras coincidan con la misma directiva de escucha.

Debería poder modificar los bloques de la siguiente manera para lograr los resultados deseados:

server {
   listen 80;
   server_name 198.251.86.133;
   return 302 http://www.jacobdevans.com/anycast-301/;
}

server {
   listen 80 default_server;
   return 302 http://www.$host$request_uri;
}

Configurar default_server y permitir que ese bloque sea el 'captura todo' mientras se define explícitamente la IP para que coincida con el encabezado HOST entrante dará como resultado que todas las solicitudes de la IP directa se redirijan a http://www.jacobdevans.com/anycast-301/y el resto a http://www.$host$request_uri.

Respuesta2

Ponlo entre comillas y ahora es como se esperaba.

server {
    listen 198.251.86.133:80;
    server_name "198.251.86.133";
    return 302 http://www.jacobdevans.com/anycast-301/;
}

server {
    listen 198.251.86.133:80 default_server;
    server_name _;
    return 301 http://www.$host$request_uri;
}

información relacionada