Nginx 302-Weiterleitung nur für nackte IP

Nginx 302-Weiterleitung nur für nackte IP

Ich versuche, eine 302-Weiterleitung einzurichten, wenn jemand die IP-Adresse eingibt, aber alle anderen Anfragen an die www.Subdomain dieser Domain mit einer 301-Weiterleitung zu versehen.

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

Bei mir funktioniert die 301-Funktion, außer wenn ich den 302-Abschnitt oben einfüge. Ich hoffe, dass es jedem (nicht https, sorry) möglich ist, seine A-Record-Stammdomäne irgendwohin zu verweisen, wo die 301-Funktion einfach ist, von example.com auf www.example.com.

Derzeit wird alles von der ersten Listen-Option erfasst

# 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.orgwerde von meinem Standort in Luxemburg ziehen

Danke!

Antwort1

Sie benötigen einen einzelnen Serverblock, da beide nicht gelesen werden, solange sie derselben Listendirektive entsprechen.

Um die gewünschten Ergebnisse zu erzielen, sollten Sie die Blöcke wie folgt ändern können:

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

http://www.jacobdevans.com/anycast-301/Wenn Sie den Standardserver festlegen und zulassen, dass dieser Block als „Catch-All“ fungiert, während Sie die IP explizit so definieren, dass sie mit dem eingehenden HOST-Header übereinstimmt, werden alle Anforderungen für die direkte IP an und der Rest an umgeleitet http://www.$host$request_uri.

Antwort2

Setzen Sie es in Anführungszeichen und dann ist es wie erwartet.

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

verwandte Informationen