nginx 302 네이키드 IP만 리디렉션

nginx 302 네이키드 IP만 리디렉션

누군가가 IP 주소를 입력하는 경우 302 리디렉션을 설정하려고 하는데 다른 모든 요청은 해당 도메인의 www.subdomain에 301이 됩니다.

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

위의 302 섹션을 넣은 경우를 제외하고는 301이 작동하고 있습니다. 제 희망은 누구든지(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

동일한 Listen 지시문과 일치하는 동안 둘 다 읽혀지지 않으므로 단일 서버 블록이 필요합니다.

원하는 결과를 얻으려면 다음과 같이 블록을 수정할 수 있어야 합니다.

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를 설정하고 해당 블록을 'catch all'로 허용하는 동시에 들어오는 HOST 헤더와 일치하도록 IP를 명시적으로 정의하면 직접 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;
}

관련 정보