2018년 3월 21일 수요일

Apache virtualhost rewrite 설정

virtualhost 설정은 기본적으로 IP 기반으로 동작한다

http는 80포트
https는 443포트

한 서버에서 테스트 시에 http와 https를 동시에 사용할 경우 문제점이 발생한다.
예를 들면
http://nonssl.testserver.com 이라는 URL을 호출하였을 시 문제가 없다
하지만 https://nonssl.testserver.com https로 호출하였을 시에 코드는 200이 떨어지면서 정상적으로 호출 된거처럼 보인다. 이건 잘못된 것이기 때문에 바로 잡아 주어야 한다.
이 원리는 기본적으로 host파일에 IP와 domain을 매핑 시키면 도메인명을 찾아 호출되는게 아니라 IP로 호출하기 때문에 https://nonssl.testserver.com 로 호출 하였을 시에
virtualhost *:443 으로 Listen하고 있는 virtualhost로 호출된다. 이 원리가 이해가 안간다면 virtualhost 동작 방식 문서를 참고하길 바란다.

IP를 추가로 할당 하여 virtualhost IP:PORT 로 설정 해주어도 가능하지만 만약 추가로 IP를 할당 받지 못할 경우 mod_rewrite를 사용하여 https 로 호출되는 것을 막을 수 있다.

RewriteEngine On (rewriteengine 사용여부 default가 off기 때문에 on)
RewriteCond %{HTTP_HOST} !^usessl\.testserver\.com$ [NC] (조건)
RewriteRule (.*) http://%{SERVER_NAME}$1 [R,L] (처리)

!는 부정이기 때문에 SERVER_NAME을 받아서 ssl을 사용하는 SERVER_NAME으로 들어왔을 경우에 다시 돌려보내는 방식으로 설정한다. 

이외에도 다른 방법들이 있지만 우선 이 방법을 사용하는 것이 가장 빠르다.

댓글 없음:

댓글 쓰기