구글 검색에 도메인이 아니라 IP로 나올때 403 or 400 리다이렉트

구글에 검색했을 때, 내 사이트나 블로그 URL이 도메인명이 아니라 IP 주소로 나올 때가 있다. 이유는 서버, 호스팅, 사이트나 블로그 설정 등에 따라 IP주소로 접속을 허용하기도 하고 그렇지 않기도 하며, IP로 주소로 접속했을 때 도메인 주소로 리디렉트(redirect) 하는 곳이 있는가 하면 403페이지로 리디렉션 하는곳도 있기 때문이다. 개꿀몬(GKKmon)은 아마존 라이트세일(Amazon Lightsail) 인스턴스 Linx/Unix – Bitnami WordPress – Ubuntu Apache 환경에서 이 문제가 발생했으니 참고하길 바란다.

검색결과가 IP주소 URL로 노출되면 발생하는 심각한 문제

구글은 IP주소로 접속을 허용해 놓은 경우 검색결과에서 URL이 IP로 나타나기도 하는데(항상 그런 건 아니다), 이렇게 되면 여러 가지 문제가 생긴다. 가장 큰 문제는 SSL 보안인증서가 적용된 사이트인 경우 발생한다. 보안인증서는 IP주소가 아니라 도메인명으로만 발급되기 때문에, 구글에 내 사이트 검색 결과가 https://example.com/post 처럼 도메인이면 상관이 없지만, https://12.123.12.123/post 처럼 IP주소로 나온다면 에러가 발생한다. https는 붙었지만 보안인증서가 발급받은 도메인 주소와 달라 매칭되지 않기 때문에, 개인정보 보호 오류 페이지로 연결되고, 사용자가 ‘연결이 비공개로 설정되어 있지 않습니다. -해커가 12.123.12.123에서 정보(예: 비밀번호, 메시지, 신용카드 등)를 도용하려고 시도 중일 수 있습니다.-‘ 라는 등의 경고 메세지를 보게 된다. 이는 단순한 오류 메세지가 아니라, 실제로 IP주소로 접속 시에는 SSL 보안인증서가 적용되지 않은 것이기 때문에 보안상에 문제가 생긴다.

앞서 말한 문제들로 인해 사용자의 보안성과 접근성이 크게 떨어지게 된다. 이는 사이트가 제대로 관리되고 있지 않다고 인식될 수도 있고, 보안에 문제가 있거나 스팸성 사이트로 분류될 가능성도 있으며, 당연하게도 SEO가 낮아지고 구글 검색에도 부정적인 영향을 끼친다. 때문에 별 거 아닌 거 같아 보이지만 반드시 수정해줘야 할 사항이며, 당장 생각나는 해결책은 3가지 정도가 있었다.

검색결과가 IP주소 URL로 노출시 해결법 3가지

첫 번째 방법은 그냥 가만히 기다려 보는 것이었다. 일시적으로 IP로 표시된걸 수도 있고, 기다려보면 다시 도메인으로 보일 수도 있다. 왜냐면 구글이 동네 쩌리 검색엔진도 아니고, 이런 경우가 수도 없이 있었을 테니까, 기다리면 자연스럽게 IP주소 URL은 도태되고 도메인 주소 검색결과만 활성화될 거라고 생각했다. 지금 생각해봐도 터무니없거나 틀린 생각까지는 아니다. 하지만 상당히 수동적이고 불확실하며, 기간도 정해지지 않고 랜덤성이 강한 잘못된 방법임이 분명했다.

두 번째 방법은 구글에 노출되는 https://12.123.12.123/post URL로 접속했을 시 https://example.com/post 로 리다이렉트 시키는 것이었다. 얼핏 나쁘지 않아 보이는 방법이었고, 실제로 많은 사람들이 사용하고 있는 방법이다. 하지만 도메인 주소로 리다이렉션 되기 전 IP URL 링크를 눌렀을 때, 개인정보 보호 오류 페이지를 보게 되는 건 똑같았고, 고급 탭을 눌러 ‘안전하지 않은 페이지로 이동’ 까지 눌러야만 리다이렉션 됐다. 오류 페이지를 보기 전에 리다이렉션 되는 방법을 알면 좋았겠지만, 아무리 검색해봐도 방법을 알 수 없었다. 심지어 방법을 안다고 해도 계속해서 구글 검색에 IP URL 링크가 노출될 수 있는 환경이기 때문에 근본적인 해결책이 아니었다.

마지막 방법은 내 고정 아이피 주소인 http://12.123.12.13https://12.123.12.123 연결에 대한 모든 접속에 403이나 400 오류 페이지를 리다이렉션 하는 것이었다. 403 오류 페이지는 ‘서버가 허용하지 않는 웹 페이지나 미디어를 사용자가 요청할 때’ 보여주는 오류페이지고, 400 오류 페이지는 ‘잘못된 요청, 서버가 요청의 구문을 인식하지 못했다’ 라는 오류 페이지다. 때문에 아이피 주소로 접속 시에만 403 or 400 오류페이지를 보여주게 되면, 이 접속을 서버에서 허용하지 않았다는 올바른 알림이 되고, 이 상태로 검색반영이 될 때까지 기다리면 자연스럽게 IP주소 링크는 도태되고 도메인 주소만 남게 될 것이다.

IP주소 URL을 400 오류 페이지로 리다이렉션 하는 방법

실제 적용 방법은 FTP 방식으로

/opt/bitnami/apps/wordpress/conf/httpd-prefix.conf

파일을 수정하거나, SSH 연결에서

sudo nano /opt/bitnami/apps/wordpress/conf/httpd-prefix.conf

라는 명령어를 사용해 httpd-prefix.conf 파일 안에 아래 내용을 넣으면 된다.

# 리다이렉션 허용
RewriteEngine On
# 모든 HTTP 연결을 HTTPS 로 Rewrite
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R=301,L]
# 모든 WWW 연결을 non-WWW 로 Rewrite
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# https://12.123.12.123 연결을 400 오류 페이지로 Rewrite
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^12\.123\.12\.123
RewriteRule ^ [F]
# http://12.123.12.123 연결을 400 오류 페이지로 Rewrite
RewriteCond %{HTTPS} =off
RewriteCond %{HTTP_HOST} ^12\.123\.12\.123
RewriteRule ^ [F]

12.123.12.123 부분을 당신의 실제 고정 IP주소로 변경하면 된다. 사실 http://12.123.12.123 로 접속하면 모든 http 연결을 https 로 리다이렉트 한다는 선언때문에 https://12.123.12.123로 자동 연결된다. 때문에 맨 아래 구문은 적을 필요가 없지만, 혹시 모르니까 가장 안전하고 깔끔하게 모든 경우의 수를 다 입력했다. 수정 완료 후 SSH에서

sudo /opt/bitnami/ctlscript.sh restart apache

라고 입력해 아파치를 리부팅 해주면 된다.

아파치 재시작이 끝나고 테스트를 할 때, 반드시 브라우저의 쿠키와 사이트 데이터을 삭제하자. 실제로 모든 설정이 완벽하고 제대로 리다이렉트 되고 있어도, 남아있는 쿠키와 사이트 데이터로 인해 변경한 설정대로 표현되지 않을 수 있기 때문이다(실제 경험담). 같은 환경에서 올바르게 개꿀몬(GKKmon)이 명시한 대로 설정했다면

example.com, www.example.com, http://example.com/, http://www.example.com/ 들은
https://example.com/ 으로 리다이렉트 되고,

12.123.12.123, http://12.123.12.123, https://12.123.12.123 들은
400 Bad Request 페이지로 리다이렉트 된다.

이제 구글 검색에 반영되기를 기다리는 일만 남았다. 약 2주 내외로 반영된다고 한다.