Nginx : IP 주소를 도메인 이름으로 리디렉션


12

다음과 같은 Nginx 설정으로 :

server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;

    server_name isitmaintained.com;

    ...
}

server {
    listen 178.62.136.230:80;
    server_name 178.62.136.230;

    add_header X-Frame-Options "SAMEORIGIN";

    return 301 $scheme://isitmaintained.com$request_uri;
}

나는 리디렉션하려고 http://178.62.136.230/http://isitmaintained.com/ 하지만이 설정을 배포 할 때 나는 끝낼 Redirect loop해당 링크의 또는 둘 다.

내가 뭘 잘못하고 있죠?

답변:


30

두 번째 블록에서 이것을 시도하십시오 :

server {
    listen 80;
    server_name 178.62.136.230;

    return 301 $scheme://isitmaintained.com$request_uri;
}

문제는 두 번째 서버 블록 listen지시문이 첫 번째 서버 블록보다 더 구체적이므로 항상 사용된다는 것입니다. 그리고 두 번째 블록은 해당 listen사양 의 유일한 가상 호스트 이므로 항상 사용됩니다.


말이 되네요 하지만이를 적용 할 때, 나는 다음과 같은 오류가 발생합니다 : nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32:( 그리고 내 도메인 이름이 그렇게 오래되지 않기 때문에 그 이해가되지 않습니다.
마티유 나폴리

어떤 이유로 든 설정에는 nginx의 가상 호스트 서버 이름에 더 많은 저장 공간이 필요하므로 설정을 늘리면됩니다.
Tero Kilkanen

직접 시도하지 않아서 죄송합니다. 문제가 있다고 확신했습니다. 그러나 당신은 옳았습니다, 리디렉션은 지금 작동합니다! 매우 따뜻한 감사합니다 :)
Matthieu Napoli

당신은 F ***** 맞아, 내 문제를 해결, upvoted, thnx
a_m_dev

3

당신은 가까이있었습니다. 당신이 찾고있는 것을 다시 작성하십시오.

server {
    listen 178.62.136.230:80;
    server_name 178.62.136.230 isitmaintained.com;

    rewrite  ^/(.*)$  http://www.isitmaintained.com/$1 permanent;
}
server {
    listen 80;
    server_name www.isitmaintained.com;
    # Serve Stuff Here.
}

5
rewritereturn위의 정확히 같은 일을.
Tero Kilkanen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.