[nginx] 도메인 변경시 처리
만약 도메인이 www.domain1.com 에서 www.domain2.com로 변경 되었고,
www.domain1.com, www.domain2.com 도메인을 모두 소유하고 있을 경우
domain1을 domain2로의 리다이렉트를 nginx에서 처리하는 방법 입니다.
nginx에서 주소를 바꿔주도록 설정 해주면 된다.
server {
listen 443;
server_name 도메인1;
return 301 도메인2$request_uri;
}
위와 같이 301코드와 함께 도메인2로 리턴을 하면 파라미터까지 추가해서 보낼 수 있다.
ex) www.naver.com/hihi→ www.daum.net/hihi
그러나 도메인1로 post요청을 보내면 308 permanent redirect 이라는 메시지와 함께 요청이 제대로 전달 되지 않는다.
확실히 어떤 이유 때문에 오류가 나는지는 모르겠지만 도메인2로 리다이렉트 될 때 리다이렉트가 될뿐
post요청을 보내지 않아서 그런거라 생각 된다.
301 Moved Permanently - HTTP | MDN
server {
listen 443;
server_name 도메인1;
if ($request_method != POST) {
return 301 도메인2$request_uri;
}
location ~* ^{
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
# proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Content-Type $content_type;
proxy_pass 도메인2;
}
}
request_method 가 POST 가 아닌 다른 요청일 경우 도메인2로 redirect 시켜주고, POST 요청의 경우 proxy_pass 를 이용하여 redirect 시켜 주었다. proxy_pass 를 이용할 경우 도메인이 바뀌지 않기 때문에 POST method일때만 proxy_pass를 넣어 주었다.
proxy_set_header Host $http_host;
→ 이 옵션의 경우 넣으면 400 Request Header Or Cookie Too Large 오류와 함께 nginx로그에는 수많은 반복 로그들이 찍혔다. 이유는 모르겠다. (stackoverflow 보고 해결)