운영체제 깨알지식 웹핵






#HTTP 헤더 #Apache Web Server #HTTP Redirect #Location Header #301 Redirect #302 Redirect #301 영구이전 #301 Moved Permanently #302 임시이전 #302 Found #VirtualHost #오라클 클라우드 #Oracle Cloud Free Tier #DDNS #Dynamic DNS #dynu.com #dynu.net

[2020년 01월 28일]

Apache 웹서버 2.2: VirtualHost의 도메인 영구 이전 (Permanent Redirect) 설정: "HTTP/1.1 301 Moved Permanently"

요약

  • Apache2 웹서버 설정의 <VirtualHost> 항목에 RedirectPermanent / http://hostname.to.redirect/ 추가
  • sudo service apache2 restart 실행

302 임시이전 (302 Moved Temporarily)

2006년 부터 유지해오던 도메인인 kristalinfo.com이 2020년 4월 4일 부터 등록만료된다. 해당 사업이 이미 2008년 2월 29일에 종료되었으나 관련 문의가 종종 있어서 이 도메인을 유지하고 있었다. 도메인 유지와 서버 호스팅에 비용이 제법 들어가기 때문에 이제는 도메인은 유지하지 않고 무료서버에 누리집만 남기기 위한 방법으로 오라클 클라우드(무료 서버 제공)와 동적 DNS(Dynamic DNS; DDNS) 서비스인 dynu.com을 이용하려고 하였다. 그 과정은 다음과 같다.

원래 서버의 Apache2 설정의 kristalinfoc.com에 해당하는 VirtualHost 항목에 Redirect 지시어로 모든 HTTP 요청을 http://kristalinfo.dynu.net/으로 보내도록 설정한다.

[root@www ~]# uname -a
Linux www 2.6.18-371.12.1.el5 #1 SMP Wed Sep 3 16:22:34 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@www ~]# httpd -v
Server version: Apache/2.2.3
Server built:   Jul 23 2014 10:09:41
[root@www ~]# tail -9 /etc/httpd/conf/httpd.conf

<VirtualHost *:80>
    ServerName www.kristalinfo.com
    ServerAlias kristalinfo.com
    Redirect / http://kristalinfo.dynu.net/
</VirtualHost>

Header unset X-Powered-By

[root@www ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[root@www ~]# 

위에서 보듯이 원 서버는 2014년에 구축된 리눅스 서버이며 Apache/2.2.3 기반으로 누리집을 운영하고 있었다. kristalinfo.com의 가상호스트(<VirtualHost>) 항목에 Redirect / http://kristalinfo.dynu.net/을 추가하고 아파치 웹서버를 재기동하였다.

root@kali:~# curl -I http://www.kristalinfo.com/test
HTTP/1.1 302 Found
Date: Tue, 28 Jan 2020 06:34:23 GMT
Server: Apache
Location: http://kristalinfo.dynu.net/test
Connection: close
Content-Type: text/html; charset=iso-8859-1

root@kali:~# 

위는 Kali Linux에서 www.kristalinfo.com에는 존재하지 않는 경로인 http://www.kristalinfo.com/test의 HTTP 요청에 대한 서버의 응답 헤더이다. 404가 나오는 것이 일반적이어야 하나 Redirect 지시자에 의해 웹 브라우저(curl)로 HTTP/1.1 302 Found 헤더와 Location: http://kristalinfo.dynu.net/test 헤더가 전달되는 것을 관찰할 수 있다. 액면상으로는 원하는 것을 모두 얻었다.

그런데 여기서 하나 더 원하는 것은 다가오는 2개월 여 후인 4월 4일에 만료되는 kristalinfo.comkristalinfo.dynu.net으로 완전히 대체하는 것이다. 때문에 302 Redirect 만으로는 부족하다. 301 Redirect 응답이 더 좋은 선택이다.

[root@www ~]# tail -9 /etc/httpd/conf/httpd.conf

<VirtualHost *:80>
    ServerName www.kristalinfo.com
    ServerAlias kristalinfo.com
    Redirect Permanent / http://kristalinfo.dynu.net/
</VirtualHost>

Header unset X-Powered-By

[root@www ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[root@www ~]# 

Redirect 지시자에 Permanent라는 단어를 덧붙였다. 이렇게 하면 웹 서버는 301 Redirect로 응답한다. (참고: Apache 2.2는 Redirect Permanent(공백O)와 RedirectPermanent(공백X)을 동일하게 처리하였다.)

root@kali:~# curl -I http://www.kristalinfo.com/testxxxtest
HTTP/1.1 301 Moved Permanently
Date: Tue, 28 Jan 2020 06:43:19 GMT
Server: Apache
Location: http://kristalinfo.dynu.net/testxxxtest
Connection: close
Content-Type: text/html; charset=iso-8859-1

root@kali:~# 

칼리에서 curl을 이용하여 HTTP 헤더를 열람해보면 HTTP/1.1 301 Moved Permanently 헤더와 Location: http://kristalinfo.dynu.net/testxxxtest 헤더가 전달되는 것을 볼 수 있다.

인간이 웹 브라우저로 접근할 때 서버의 응답에 전달되는 301 Redirect와 302 Redirect는 동일하다. 그러나 구글(google.com)이나 빙(bing.com)과 같은 웹 검색 엔진의 입장에서는 처리가 달라진다. 302 Redirect는 임시로 URL이 이전되었다는 뜻이므로 검색엔진의 입장에서는 원래 URL을 더 중시할 것이다. 반면 301 Redirect는 원래 URL을 새로운 도메인이 완전히 대체했다는 것이므로 새로운 URL을 더 중요시하게 된다. 2개월 여 내에 새로운 URL로 검색엔진 갱신을 위해서는 301 영구이전 방식이 효율적일 것이라 판단하였다.

구글 검색엔진의 경우에는 DDNS로 서비스하는 URL에 대한 색인을 꺼리는 것으로 보인다. webhack.dynu.net의 내용이 구글에 노출된 이후에도 검색결과에 포함된 것은 최소 6개월이 지난 후였던 것 같다. 구글 검색엔진에서 kristalinfo.dynu.netwww.kristalinfo.com을 완전히 대체하는 것은 2개월 보다는 훨씬 많은 기간이 필요할 수도 있을 듯...

[덧붙임] 하루가 지난 1월 29일 저녁에 구글 검색엔진에서 "site:kristalinfo.dynu.net"를검색했더니 벌써 다섯 개의 결과가 색인되어 있다. DDNS인 dynu.net 색인 기피는 기우였던 것으로 보인다.

[처음 작성한 날: 2020.01.28]    [마지막으로 고친 날: 2020.01.29] 


< 이전 글 : Offensive Security, Kali Linux 2020.1 배포판 발표 - 범용 리눅스로의 전환 시도? (2020.01.29)

> 다음 글 : 루팅없이 LG V40 씽큐 안드로이드 설정만으로 좀더 빠르게 좀더 오래 배터리 쓰기 (2020.01.27)


크리에이티브 커먼즈 라이선스 이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.
잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다.
웹핵.다이누.넷 대문 깨알지식 대문