우분투 버츄얼호스트 SSL 적용 후 http 접속시 404 에러

webstudy / / 2020. 9. 3. 11:30

우분투 버츄얼호스트 SSL 적용 후  http 접속시 404 에러 두달 동안 나를 괴롭혔던 놈.

 

결국엔 내가 승리자인가?ㅋㅋ

 

저같은 사람이 또 있을까 싶어서 글로 남겨봅니다.

 

저의 환경은 이렇습니다.

  • 서버 지식 티끌만큼
  • 우분투 서버 운영중
  • 서버로 도메인 다수 연결해서 각 사이트 운영중 ( 버츄얼호스트 )
  • 최근 SSL 이슈때문에 사이트 하나를 시범삼아 SSL 적용함
  • 적용한 SSL 은 우분투 무료사용가능한 Letsencrypt 
  • 해당 도메인 https 정상 작동
  • 해당 도메인 http 접속시 404 에러 

404에러때문에 주로 https 주소를 대외적으로 사용하였지만 마음 한쪽 귀퉁이에 http 접속시 404 에러 튀어나오는게 

항상 마음에 걸렸음 

 

해결까지 두달 걸림

물론 하루 24시간 붙들고 있었던건 아니었지만.

 

사이트 작동 원리

 

1. 익명의 누군가가 aaa.co.kr 을 주소창에 작성해서 접속시도

2. aaa.co.kr 도메인이 등록된 등록기관 ( 예를 들어 가비아 , 호스팅KR )에서는 

   이 aaa.co.kr 로 누군가 접속을 시도하면 123.123.123.123 아이피로 보냄.

   ( 여기서 123.123.123.123 아이피는 내가 운영하는 서버의 아이피 )

3. 내 서버는 접속자가 123.123.123.123 접속시  ServerName을 뭘로 설정했는지 확인하고 버츄얼호스트 설정에서

   해당 ServerName 이 접속자가 주소창에 작성한 aaa.co.kr로 된 .conf 파일을 찾음

   conf 의 설정내용에 따라 해당 .conf 파일의 적혀있는 DocumentRoot 대로 접속자를 보냄.

 

내가 404 에러가 발생되면서 어떻게 사이트가 돌아가는지를 공부한 결과

( 틀릴 수도 있음. 하지만 대략 맞다고 생각 )

 

http 와  https 포트구분을 생각해내다.

404 에러 해결하기 https 포트

SSL을 적용하면서 버츄얼호스트  .conf 파일의 상단에 적힌 포트부분을 기존 80 > 443으로 변경해서 사용하였다.

이것은 내가 임의로 정한것이 아니라 SSL 설치시 https의 기본 사용포트라고 해서 저걸로 사용했다.

<VirtualHost *:443> 의 뜻은 

해당 서버의 443번 포트로 접속할때 ServerName 이 aaa.co.kr 이라면 해당 .conf의 규칙을 따르시오

라는 뜻이다.

 

어제 불현듯 생각난것이 443포트는 https의 고유포트라서 https만 접속이 가능했다면 http로 접속하고 싶다면 어디로 가게 되는것인가?

 

웹사이트 구동방식도 어차피 서버에 있는 폴더에 각각의 도메인을 지정해줘서 각각의 폴더내에 설정된 내용대로 돌아가는것과 동일하다고 생각한다.

그래서 404 에러가 뜰때 대부분의 도메인 접속경로가 /var/www/html/ 은 동일하기에 /var/www/html/index.php 를 만들어서 Hello world 작성하고 http 접속하니 떡하니 Hello world 가 보이는것이 아닌가.

그래서 결론내린것이 아! 내가 http로 접속할때 길을 잃은것이구나 길만 찾아주면 되겠네?

길은 도메인은 바뀌지 않았으니 혹시 포트번호 인가? 싶었다. 

 

https conf 파일

SSL 적용을 하면서 도메인을 https 포트만 사용되게 설정한게 아닌가 싶었다.

그래서 하단에 80포트도 사용할 수 있게 해주면 될것인가?

 

https 설정에 http 설정 추가

혹시나 될까 싶어서 위의 이미지처럼 SSL적용하기전에 80포트로 설정했던 문구를 추가해서 붙여봤다.

그랬더니 404 에러가 사라졌다. 하지만 제대로된 사이트로 연결된것은 아니다.

 

404에러 해결 마지막단계

이제 http로도 정상적으로 내 사이트로 접속이 되게끔 만들었는데 접속후에 엉뚱한 다른 버츄얼호스트로 연결이 되는것이 아닌가;

그래서 이건 또 왜그런가 싶었는데 해결은 간단했다.

이제까지 두달동안 수없이 봐왔던 http로 접속시 https로 리다이렉트 시켜주는 .htaccess 파일 수정만 해주는것으로

404에러에서 벗어났다..


RewriteEngine On

RewriteBase /

 

RewriteCond %{HTTPS} !=on

RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

 

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]


보통 워드프레스 ( 본인은 워드프레스 사이트 운영중 ) 의 고유주소부분을 설정하게 되면 위와 같이 .htaccess 파일을 생성해서 루트에 업로드하라고 한다.

여기서 빨간색부분만 추가해주면 http로 접속한 접속자들을 친절하게 https 사이트로 이동시켜준다.

 

결론

http로도 접속이 가능하도록 포트를 열어주는것이 이 문제의 해결방법이었다.

이렇게해서 또 하나 배우는것 아닌가 싶다. ㅠㅠ

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기