NGINX WWW 도메인 주소 리디렉션 설정 방법

NGINX

NGINX로 웹서버를 구성하고 외부에서 방문자들이 접속하기 위해서는 도메인을 연결해야 하는데요.

도메인을 구입한 업체에서 제공하는 DNS 서비스를 이용하거나 직접 DNS 서버를 구축한 다음 호스트 IP를 연결하고 nginx.conf 설정 파일의 server 블럭에서 가상호스트를 설정하면 방문자가 접속할 도메인 설정은 간단히 끝나게 됩니다.

여기서 간과하기 쉬운 하나는 www가 붙은 도메인과 www가 없는 도메인을 모두 가상호스트에 설정한 다음 메인으로 할 도메인에 redirection 해야한다는 것인데 그 이유는 다음과 같습니다.

WWW/non-WWW 둘중에 하나를 메인으로 해야 SEO에 좋다.

예로 domain.com 이라는 도메인이 있다면 검색엔진은 domain.com과 www.domain.com은 전혀 다른 페이지로 인식합니다.

구글 웹마스터도구 또한 ‘선호하는 도메인’ 설정으로 www 도메인과 non-www 도메인을 모두 연결한 다음 메인으로 사용하는 도메인으로 리디렉션 하는 것을 권장하고 있으며 이는 같은 내용의 페이지가 두개의 도메인으로 나뉘는 것을 방지하기 위함입니다.

www가 붙은 도메인 또는 없는 도메인 어떤 것을 메인으로 하는지는 관리자 마음이며 대형 서비스 사이트 같은 경우 서비스마다 2차 도메인을 분류해서 사용하기 때문에 메인 페이지를 www가 붙은 도메인으로 사용하는 경향이 높습니다. (예: 네이버, 다음)

하지만 규모가 작은 홈페이지나 블로그등에는 조금이라도 주소가 짧은 non-www 주소를 사용하는 것이 깔끔해 보이는 것이 개인적인 생각입니다.

NGINX non-WWW ↔ WWW 리디렉션 설정

return 301 $scheme://www.domain.com$request_uri;

우선 NGINX에서 주소 리디렉션을 하는 기본 Syntax는 위와 같습니다. 이걸 응용해 선호하는 페이지로 리디렉션을 설정합니다.

# non-WWW 주소 가상호스트 설정 : WWW로 리디렉트
server {
   listen 80;
   server_name domain.com;
   return 301 $scheme://www.domain.com$request_uri;
}

# WWW 주소 가상호스트 설정
server {
   listen 80;
   server_name www.domain.com;
   location / { 

   }
}

www가 붙은 주소를 메인으로 사용할 경우를 예로 가장 기본적인 server 블럭(가상호스트)을 두개로 나눠 설정하는 방법입니다. 301 리디렉션으로 검색엔진에 영구적으로 페이지가 이동되었다는 것을 알려줍니다.

메인이 되는 www.domain.com의 location 블럭에는 홈페이지에 대한 설정이 들어가야겠죠?

server {
   listen 80;
   server_name domain.com www.domain.com;
   if ($http_host = domain.com {
      return 301 $scheme://www.domain.com$request_uri;
   }
   location / {

   }
}

또다른 방법으로 if문을 사용해서 접속한 도메인 주소를 체크한 다음 non-www 주소라면 www를 붙여 리디렉션 하는 방법도 있습니다.

server 블럭 하나로 끝낼 수 있다는 장점이 있지만 조건문이 들어가 있기 때문에 대량의 트래픽이 들어올 경우 첫번째 방법보다 처리속도가 상대적으로 느립니다. 하지만 개인적으로는 큰 차이는 없어 보이네요.

#비보안 연결 http을 모두 https로 리디렉트
server {
   listen 80;
   server_name domain.com www.domain.com;
   return 301 https://www.domain.com$request_uri;
}

server {
   listen 443 ssl;
   server_name domain.com;
   ssl on;
   ssl_certificate fullchain.pem;
   ssl_certificate_key privkey.pem;
   ssl_trusted_certificate chain.pem;
   ssl_dhparam dhparam.pem;

   return 301 https://www.domain.com$request_uri;
}

server {
   listen 443 ssl;
   server_name www.domain.com;
   ssl on;
   ssl_certificate fullchain.pem;
   ssl_certificate_key privkey.pem;
   ssl_trusted_certificate chain.pem;
   ssl_dhparam dhparam.pem;

   location / {

   }
}

만일 SSL이 적용된 HTTPS 로 리디렉션 하려면 위처럼 비보안 http 프로토콜 주소 두개를 모두 www가 붙은 https 주소로 리디렉션 하고 https non-www 주소 또한 리디렉션 설정합니다.

여기서 중요한 것은 단순히 리디렉션 설정이라고 해도 SSL 프로토콜을 사용하려면 인증서 설정을 해야 합니다.

위 코드들은 non-www 에서 www로 리디렉션하는 것을 예로 들었지만 응용해서 간단하게 그 반대로도 설정할 수 있습니다.

앞서 얘기했던 것처럼 두 도메인간 선호 도메인 하나를 선택해서 리디렉션 설정을 하지 않으면 SEO에서 손해를 보게 되므로 꼭 설정하는 것이 좋습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Fill out this field
Fill out this field
유효한 이메일 주소를 입력해주세요.