-
가상호스팅으로 아파치 서브도메인 포트별로 연결하는 방법소소한 IT 이야기 2018. 10. 28. 17:27반응형
이번 포스팅에서는 아파치를 이미 설치해둔 상황에서 서브도메인들을 포트별로 연결하여 실제 웹상에서는 포트가 노출되지 않도록 하는 가상호스트 기능에 대해서 알아보도록 하겠다.
나의 경우에는 이 기능이 필요해졌던 이유가 라즈베리파이에 전에 아파치와 PHP를 설치해두고 방치를 해둔 상황이였는데, 최근에 NodeJS와 React, Express 프레임워크들을 공부하면서 실서버로 올려야할 필요성을 느꼈기 때문이다.
원래는 Heroku NodeJS Free 서버를 사용하고 있었는데 장시간 접속이 없을시에 초기 접속시간이 너무너무 오래 걸려 아무리 테스트용도나, 내 개인 용도의 포트폴리오 사이트를 업로드 한다고 가정하더라도 퍼포먼스 면에서 안좋은 평가를 받을수 있으리라 생각했기때문이다.
우선 내 라즈베리파이 서버의 서버 포트 구성은 아래와 같았다.
Apache 2.4 : 80번에 할당, 443 포트에 SSL 보안인증서 사용으로 HTTPS 사용가능
NodeJS : 보통 예제에 3000번 포트가 많아서 3000번 포트사용 이후 ReverseProxy 기능으로 443 포트도 적용해서 SSL 사용가능
내가 구현하고자 하는 결론은, NodeJS 앱을 구동할때 보통 포트를 지정해두는데 이렇게 될경우 내 도메인이 example.com 이라 가정하면 example.com:3000으로 접속하여야 Node앱으로 접속이되고 그냥 example.com이라고 접속하면 아파치 하위의 디렉토리를 불러온다는 점이였다. 그래서 내가 서브 도메인을 생성해서 Node앱들은 내부포트로 연결해주고 싶다는 것이였다. 그러니 결국에는 test.example.com 요런식으로 접속하게되면 내부에선 localhost:3000으로 연결해주니 외부에서 접속할때에 포트가 전혀 노출되지 않은 깔끔함을 보여주기때문이다.
우선 이 작업을 하기전에 도메인 사이트로 들어가서 A값을 내 서브도메인과 연결해주는 작업을 해야한다. 나의 경우에는 Godaddy와 FreeNom이라는 생활코딩에서 추천해준 무료도메인 사이트를 이용했는데 고대디는 일단 비용이 드므로 처음에는 Freenom 이용을 추천한다.
보통 도메인 사이트들의 관리페이지는 다 이렇게 생긴것같다. 다른 도메인사이트를 사용하더라도 참고해서 사용하면 될듯..
검색을 조금 해보니 Type에 A가 아닌 CNAME을 주라고 되어있는데 본인의 경우에는 CNAME으론 작동이 안되고 A가 되어서 그냥 A를 주었다.
조금 눈썰미가 있으신 분이라면 저기 Name 부분에 딱 무엇을 넣으면 될지 감이 오시는분들이 계실것이다. 아무것도 없는 상태에선 example.com으로 접속이 될것이고 www를 추가하면 www.example.com으로 접속이될것이다.. 그렇다면 test를 입력하면 test.example.com이라는 서브도메인으로 연결이 될것이라고 추측해볼수 있다. 요즘 브라우저들은 보통 www을 입력하지 않아도 자동으로 입력해주니 별로 상관은 없는듯한데.. 기본 설정이 저렇게 되어있었다. 그러면 www도 서브도메인 중 하나인지? 잘 모르겠다. 그리고 Target에는 본인의 IP주소를 입력하면된다. 처음에 여기서 IP주소와 포트를 같이 입력하면 무리없이 될줄 알았는데 포트자체가 입력이 안되고 순수 IP주소만 입력해야하는 시스템이였다.
내가 알기로는 Type에 CNAME을 주면 Target에 DDNS를 입력해도 되는것으로 알고 있는데 시도는 안해봤으므로 PASS~..
빨리 적용되야하기에 TTL은 300으로 입력하고 Save
이후에는 서버로 돌아가서 /etc/apache2/sites-available 디렉토리로 접속한다. 여기에서 내가 접속할 conf 파일을 생성해주어야하는데
test.example.com.conf 이런식으로 파일을 생성해주면된다.
<VirtualHost *:80>
ServerName test.example.com
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
보시면 아시겠지만 저기 LocalHost의 포트는 본인이 연결하고 싶은 포트번호를 입력하면된다. 그리고 콘솔로 돌아가서 root권한을 획득한다. 이후에는 아래 명령어를 입력해서 Apache의 프록시 관련 모듈을 활성화 시키면된다.
a2enmod proxy
a2enmod proxy_http
그리고 아래 명령어를 입력해서 available인 사이트를 Enable로 활성화 시킨다. 그리고 아파치 재시작
a2ensite 도메인이름 (ex test.example.com)
systemctl reload apache2
그리고 test.example.com으로 접속해보면 포트번호 없이도 서브도메인으로 원하는 내부포트로 연결이 되어있을 것이다.
SSL을 연결하기 위한 추가설정 - 이 부분은 SSL HTTPS적용을 원하시는 분만 적용하시면 됩니다. 그리고 이 작업을 진행하기 전에 이미 서브도메인에 발급된 SSL 인증서 (ex. Let's Encrypt같은..)가 존재해야합니다.
1. 위의 VirtualHost를 작성하였던 곳의 파일로 접속한다
2. 링크에 접속해서 VirtualHost 부분의 443 포트 부분만 복사한다. HTTPS 사이트를 선택하고 본인의 사이트 정보를 입력하면된다. 그리고 DocumentRoot 부분과 <Directory></Directory> 항목은 다 지워준다. 입력시에는 루트폴더를 거기로 잡아버리기때문에 NodeJS같은 앱들의 루트폴더가 그곳으로 작동되어버린다.
3. 아래 명령어로 다시 활성화
a2ensite 도메인이름 (ex test.example.com)
systemctl reload apache2
이후에 HTTPS로 접속해보면 잘 접속되는것을 확인할수 있다.
반응형'소소한 IT 이야기' 카테고리의 다른 글
[취업] 시간표 자동 생성 프로그램 과제 후기 (0) 2018.12.19 [개발일지] NodeJS 포트폴리오 웹앱 구조 개선 계획 (0) 2018.10.31 유다시티 프론트앤드 개발자 나노학위 과정 종료 및 후기 (4) 2018.10.22 오늘의 FREE TECHNOLOGY EBOOKS (PACKT) - Java Deep Learning Essentials (0) 2018.03.21 오늘의 FREE TECHNOLOGY EBOOKS (PACKT) - Building Machine Learning Projects with (0) 2017.11.29