NGINX를 사용하여 다른 도메인으로 리디렉션하는 방법은 무엇입니까?


136

NGINX 를 사용하도록 mydomain.com하위 도메인 *.mydomain.com을 리디렉션하려면 어떻게 www.adifferentdomain.com해야합니까?

답변:


276

server_name 은 .mydomain.com 구문을 사용하여 접미어 일치를 지원합니다.

server {
  server_name .mydomain.com;
  rewrite ^ http://www.adifferentdomain.com$request_uri? permanent;
}

또는 0.9.1 이상 버전 :

server {
  server_name .mydomain.com;
  return 301 http://www.adifferentdomain.com$request_uri;
}

1
수신 대기 포트를 넣을 필요가 없습니까? 예 : 들어 80
Ryan

1
@Ryan listen지정되지 않은 경우 지시문의 기본값은 포트 80입니다. 실제로는 일반적인 것보다 조금 더 복잡합니다. 자세한 내용은 nginx 구성 문서 를 참조하십시오.
Yitz

2
무엇을 않는 ?말에 달성?
Dan Dascalescu

5
차이 무엇 rewritereturn 301 $scheme://www.adifferentdomain.com$request_uri;?
Dan Dascalescu

6
? 다시 쓰기가 끝나면 nginx에 원래 쿼리 문자열을 추가하지 않도록 지시합니다. $request_uri쿼리 문자열이 이미 있으므로 다시 추가 할 필요가 없습니다. return 301구문은 새로운, 그리고 두 가지 방법 사이에 동작의 차이가 없을 것,하지만 난 원래이 질문에 대답 할 때 나는 안전 구문 갔다, 그래서 많은 분포, 필요한 버전을 가지고 있지 않았다.
kolbyjack


15

가능한 경우 다시 쓰기 모듈을 사용하는 이유는 return무엇입니까? 기술적으로 말하면, 여기에서 읽을 수return 있듯이 다시 쓰기 모듈의 일부 이지만이 스 니펫은 읽기가 더 쉽습니다.

server {
    server_name  .domain.com;

    return 302 $scheme://forwarded-domain.com;
}

301 리디렉션을 제공 할 수도 있습니다.


1
경로와 쿼리 매개 변수도 유지됩니까?
mpen December

3
이 예제는 @Mark를 수행하지 않습니다. 그러나 나는 당신이 이전의 답변을 섞어서 다음과 같은 것을 생각해 낼 수 있다고 생각합니다.return 302 $scheme://forwarded-domain.com$request_uri;
Robin van Baalen

부수적으로 많은 경우에, 당신은 아마도 스키마를 유지하는 대신 https로 리디렉션해야합니다 (예 : $ scheme 대신 https 사용). 이것은 프로토콜 관련 링크가 더 이상 사용되지 않는 것으로 간주되는 것과 같은 이유입니다.- paulirish.com
2010

@mahemoff 그것은 사실이 아닙니다. SSL을 방출하는로드 밸런서 뒤에 웹 서버가있는 경우를 고려하십시오.
Sebastian Neira

11

HTTPRewriteModule을 통해 작동합니다 합니다.

www.example.com에서 example.com으로 다시 쓰는 예제 :

server {    
    server_name www.example.com;    
    rewrite ^ http://example.com$request_uri? permanent; 
}

www.example.com을 example.com으로 리디렉션합니다. 둘 다 다른 도메인으로 리디렉션하고 싶습니다. 한 가지 규칙으로 그렇게 할 수 있습니까?
deb

잘 모르겠지만 server_name mydomain.com이라고 생각합니다. www.adifferentdomain.com 영구 재 작성; }해야합니까? 모든 * .mydomain.com이 필요합니까?
udo

@deb 당신은 방금 가질 것 server_name example.com www.example.com;입니다.
citruspi

이 질문은 특히 하위 도메인다른 도메인 으로 리디렉션되도록 요청 합니다. 이 답변은 두 가지 중 어느 것도 (명시 적으로) 대답하지 않습니다.
사키

이것은 중요한 301이 없습니다!
Sliq

9

"domain1.com"에 대한 요청을 "domain2.com"으로 리디렉션하려면 다음과 같은 서버 블록을 만들 수 있습니다.

server {
    listen 80;
    server_name domain1.com;
    return 301 $scheme://domain2.com$request_uri;
}

누군가 https : // 요청을 리디렉션해야 할 수도 있습니다. listen 443;
Rafik Farhad

0

임시 리디렉션

rewrite ^ http://www.RedirectToThisDomain.com$request_uri? redirect;

영구 리디렉션

rewrite ^ http://www.RedirectToThisDomain.com$request_uri? permanent;

특정 사이트에 대한 nginx 구성 파일에서 :

server {    
    server_name www.example.com;
    rewrite ^ http://www.RedictToThisDomain.com$request_uri? redirect;

}

0

서버 {} 블록 내에 if 조건을 간단히 작성할 수 있습니다.

server { 

    if ($host = mydomain.com) {
        return 301 http://www.adifferentdomain.com;
    } 
}

Nginx ( nginx.com/resources/wiki/start/topics/depth/ifisevil ) 에서 'if'문을 사용할 때는주의해야합니다 . 이 경우 'server_name mydomain.com'을 대신 사용할 수 있습니다.
마티

위치 컨텍스트에서 사용될 때 악한 경우 경로 재 지정 호스트를 지정하는 데 사용될 때 안전합니다
cryptoKTM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.