nginx 302 перенаправление только на голый IP

nginx 302 перенаправление только на голый IP

Я пытаюсь настроить перенаправление 302, если кто-то вводит IP-адрес, и перенаправление 301 на все остальные запросы к www.subdomain этого домена.

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

У меня 301 работает, за исключением того, что если я добавлю раздел 302 выше, я надеюсь, что это позволит любому человеку (не https, извините) указать свой корневой домен A-записи где-нибудь, где легко сделать 301, example.com на www.example.com

В настоящее время все улавливается первой опцией прослушивания.

# 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.orgбудет вытаскивать из моего местоположения в люксембурге

Спасибо!

решение1

Вам понадобится один блок сервера, так как оба они не будут прочитаны, пока соответствуют одной и той же директиве прослушивания.

Для достижения желаемых результатов вы сможете модифицировать блоки следующим образом:

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

Установка default_server и разрешение этому блоку быть «перехватчиком всех» при явном определении IP-адреса, соответствующего входящему заголовку HOST, приведет к тому, что все запросы для прямого IP-адреса будут перенаправляться на , http://www.jacobdevans.com/anycast-301/а остальные — на http://www.$host$request_uri.

решение2

Поставьте это в кавычки, и теперь все так, как и ожидалось.

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

Связанный контент