개요
웹사이트 SSL 인증서를 설치하고 https 접속을 유도할 때 http로 접속하면 https로 강제로 리다이렉트 시키는 방법을 사용하는 경우가 많습니다.
웹페이지 소스에서 http 접속 여부를 판단해서 redirect 시키는 방법 등 여러가지 있을 수 있는데 여기서는 Apache 설정으로 쉽게 할 수 있는 방법을 소개합니다.
SSL 인증서가 설치되어 있다는 가정하에 우선 Linux Ubuntu에서 설정하는 방법을 확인해보겠습니다.
테스트 환경
테스트에 사용한 서버 환경은 다음과 같습니다.
⁃ 웹서버: Apache 2.4
SSL 엔진 모듈 활성화
먼저, SSL 엔진 모듈을 활성화 해야 HTTPS 접속을 할 수 있습니다.
~# a2enmod ssl
~# systemctl restart apache2
Apache conf 파일 수정
/etc/apache2/sites-enabled/000-default.conf 파일의 Vritual host에 다음 코드를 추가하고 Apache를 재시작하면 됩니다.
방법1 : Redirect 옵션
첫번째 방법은 [Redirect] 옵션을 이용하는 방법입니다.
HTTP 환경 설정에서 [ServerName]을 제외한 다른 항목들은 모두 삭제하거나 주석처리한 후에 리다이렉트 설정을 추가합니다.
<VirtualHost *:80>
ServerName 사이트_도메인
Redirect permanent / https://사이트_도메인/
</VirtualHost>
301
리다이렉트: Redirectpermanent
/ https://사이트_도메인/302
리다이렉트: Redirect / https://사이트_도메인/301
리다이렉트: Redirect301
/ https://사이트_도메인/302
리다이렉트: Redirect302
/ https://사이트_도메인/307
리다이렉트: Redirect307
/ https://사이트_도메인/308
리다이렉트: Redirect308
/ https://사이트_도메인/
방법2 : RewirteRule 옵션
두번째 방법은 [RewirteRule] 옵션을 이용하는 방법입니다.
첫번째 방법이 더 간편하기는 하지만, 리다이렉트 시킬 때 HTTP 상태코드 뿐만 아니라 HTTP Header 값 등 다양한 설정이 필요한 경우에는 [RewirteRule]을 이용하는 두번째 방법을 사용해야 합니다.
Rewrite 모듈 설치
우선, RewirteRule 옵션을 사용하려면 Rewrite 모듈을 활성화 해야합니다.
~# a2enmod rewrite
~# systemctl restart apache2
<VirtualHost *:80>
ServerName 사이트_도메인
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
위 설정 중에서 [R=301,L] 이 부분에 원하는 상태코드를 입력하면 됩니다.
301
리다이렉트: RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301
,L]302
리다이렉트: RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=302
,L]307
리다이렉트: RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=307
,L]308
리다이렉트: RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=308
,L]
Apache 재시작
~# systemctl restart apache2
이렇게 재시작하고 http로 접속을 해보면 https로 전환되는 것을 확인할 수 있습니다.
참고 URL
- http 접속 시에 https로 강제 리다이렉트 시키는 방법 - Apache/Rocky Linux
- http 접속 시에 https로 강제 리다이렉트 시키는 방법 - Apache/CentOS