도메인을 구입하고 나서 고민하는 점 : 앞에 www를 붙일까 말까?

결정은 본인 마음인데, 도메인 앞에 www를 붙이기로 결정한 경우 문제를 겪을만한 여지가 있습니다. 도메인 구입처에서 자체 DNS 서비스를 제공하면서 www-redirect 기능을 지원해주면 웹브라우저 주소창에 www를 안 붙이고 도메인을 입력하더라도 자동으로 www가 붙은 주소로 연결해줘서 문제가 안 생기는데, DNS 서비스에서 www-redirect 기능을 지원하지 않으면 웹브라우저 주소창에 www를 안 붙인 도메인을 쳤을 때 요청이 그대로 홈서버에 전달되거든요?


이 경우, 예를 들어 홈서버 nginx 설정파일(서버블록 conf 파일)에 www.jimnongtest1.top 주소의 연결고리는 있지만 jimnongtest1.top 주소의 연결고리가 없다면?


▲ 웹브라우저 주소창에 jimnongtest1.top 이라고 쳤을 때 404 Not Found 에러를 보게 되겠죠!

(https://jimnong.tistory.com/781 의 VirtualHost 설정 글에 추가했던 팁을 적용했었다면 403 Forbidden 에러를 보게 될 테고요.)


이 점이 문제예요.

그래서 주소창에 www를 먼저 치지 않고 도메인만 입력해서 접근하는 사용자들을 위해 www 붙은 주소로 redirect 되게끔 Nginx 설정을 추가하는 방법을 적어볼까 합니다.



먼저, 기존의 서버블록 설정파일을 에디터로 엽니다.


▲ 아마 이런 식으로 서버블록(server { })이 구성되어 있을 겁니다. www 붙은 주소가 server_name에 할당되어 있죠?


▼ www Redirect 서버블록을 구성해서 상단에 끼워넣어주면 되는데, 구성 방법이 두가지가 있습니다. 첫번째 방법은 아래처럼 적는 방법. 초록색 밑줄 부분을 본인의 주소로 바꾸면 됩니다.

Nginx www redirect


server {

server_name www를 뺀 도메인 주소;

return 301 \$scheme://www를 붙인 도메인 주소\$request_uri;

}


그리고 Nginx 서비스 재시작.

구조가 한 눈에 들어오지요? \$scheme:// 덕분에 http(80포트)든 https(443포트)든 상관없이 www가 붙은 주소로 Redirection 됩니다. 간편하죠? 다만 프로토콜을 바꾸면서(http → https) redirect하는 기능은 없기 때문에, SSL 적용 후에 https 주소만 쓰고 싶은 경우에는 (http에서 https로 redirect하는) 추가 설정을 이 서버블록 앞이나 뒤에 써줘야 할 것입니다(두번째 방법 접목 필요).


▼ www Redirect 서버블록을 구성하는 두번째 방법은... 아래처럼 하면 됩니다.


server {

listen 80;

listen [::]:80;

server_name www를 뺀 도메인 주소;

return 301 http://www를 붙인 도메인 주소\$request_uri;

}


그리고 Nginx 서비스 재시작.

첫번째 방법과 다른 점은 listen 포트와 프로토콜(http)을 특정했다는 것입니다. 나중에 SSL 설정을 하게 되면 http를 https로만 바꿔주면 (별도의 추가 설정 없이) 80포트로 들어오는 요청을 https 주소로 보내주겠죠?


저는 두번째 방법을 추천합니다. 첫번째 방법보다 직관적이고, SSL 적용 후에 첫번째 방법에 추가하는 설정은 접속시간을 잡아먹는 원인으로 작용할 가능성이 있기 때문입니다.

------------------------------------------------

원리가 눈에 보인다면 www가 붙은 도메인에서 www가 없는 주소로 Redirect하는 Nginx 서버블록도 어렵지 않게 구성할 수 있을 것입니다.


server {

server_name www를 붙인 도메인 주소;

return 301 \$scheme://www를 빽 도메인 주소\$request_uri;

}


이런 형태의 Redirect 서버블록이나


server {

listen 80;

listen [::]:80;

server_name www를 붙인 도메인 주소;

return 301 http://www를 뺀 도메인 주소\$request_uri;

}


이런 형태의 Redirect 서버블록을 구성해서 기존 서버블록 설정파일의 상단에 끼워넣고 Nginx 서비스를 재시작하면 되겠지요?



이번 글은 이쯤에서 마무리 하겠습니다. SSL 설정 이후에도 Redirect 설정을 추가해야 할 수 있는데, 그것은 Let's Encrypt 인증서 설치 글에서 다루도록 할게요.



※ 참고사항


구글 검색엔진은 www가 붙은 도메인과 붙지 않은 도메인을 별개의 홈페이지로 인식한다고 합니다. 그래서 구글에서는 "선호 도메인"이라는 개념을 도입했습니다. www 도메인과 www가 없는 도메인이 서로 다른 페이지라고 인식되지 않도록 사용자가 구글 웹마스터 도구에서 "선호 도메인"을 직접 정해줘야 합니다.


※ 참고 문서 : 선호 도메인(www가 있는 버전 또는 없는 버전)

https://support.google.com/webmasters/answer/44231?hl=ko



▲ 쇠구슬 2000개로 음악 연주하기

반응형