서버(리눅스)

apache2를 이용하여 서브도메인에 포트 연결하기(node.js 연동)

미친개발 2023. 2. 1. 20:43
반응형

Ubuntu Server 22.04 기준



예를들어 내 도메인이 example.com인데
굳이 http://example.com:3000/ 이런식으로 안해도
aaa.example.com 으로 연결했을때는 3000포트,
bbb.example.com으로 연결했을때는 3001포트로 연결되게

(주소창은 bbb.example.com으로 유지, 뒤에 뭐가 붙어있어도 그대로 가져감
예를들어서 bbb.example.com/testpage => example.com:3001/testpage의 내용 보여줌)

이렇게 서브도메인(3차도메인)에 포트를 연결하고싶다 하면 apache2를 이용하면 됨.

보통 node.js로 포트 여러개 열어서 웹 여러개 만들거나 웹사이트를 두 개 이상 만들때 아이피를 두 개 이상 할당받아서 서버를 두개 이상 둬야하나 했는데
이런 방법이 있었다.

아래 방법대로 따라하면된다.

지금 셋팅해놓고 나중에 까먹을까봐 기록해둠

1. apache2 설치

$ sudo apt-get update
$ sudo apt-get -y install apache2


중간에 -y를 넣어서 설치과정중에
Do you want to continue? [Y/n] 이딴거 뜨는거 다 자동으로 y로 해줌

2. apache2 서버 시작 / 확인

apache2 서버 시작

$ sudo service apache2 start

서비스가 제대로 동작중인지 확인하기

$ sudo systemctl status apache2.service

다음과 같이 Active가 active (running)으로 뜨면 정상

● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-02-01 20:10:42 KST; 17min ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 7029 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
   Main PID: 7033 (apache2)
      Tasks: 55 (limit: 18839)
     Memory: 10.7M
        CPU: 257ms
     CGroup: /system.slice/apache2.service
             ├─7033 /usr/sbin/apache2 -k start
             ├─7034 /usr/sbin/apache2 -k start
             └─7035 /usr/sbin/apache2 -k start

 2월 01 20:10:42 user systemd[1]: Starting The Apache HTTP Server...

아니면 이전에 뭔가 설정 잘못건드린것이니 2-1로.

이후 http://(서버ip)/ 로 접속하면 아래와 같은 사이트가 나와야 일단 정상.


2-1. 계속 오류 뜰 때 재설치
일반적으로 apt-get remove로 재설치하면 설정파일 남고 다 안지워짐
따라서 apt-get purge 이용

$ sudo apt-get purge apache2

이후 1번부터 다시 시작

3. Apache2에서 Proxy 관련 mods 활성화

-----------------------------------------수정-------------------------------------------
이거 알아보니까 3번은

$ sudo a2enmod proxy
$ sudo a2enmod proxy_http

이거 두개만 치면 끝나는거였음ㅋ
두개 치고 4번으로 넘어가셈
-----------------------------------------------------------------------------------------


이따가 configure 파일에서 Proxy 관련 옵션을 작성할건데 그 전에 Proxy 관련 mod들을 활성화해놔야함

root@user:~# cd /etc/apache2/mods-available/
root@user:/etc/apache2/mods-available# ls | grep proxy
proxy.conf
proxy.load
proxy_ajp.load
proxy_balancer.conf
proxy_balancer.load
proxy_connect.load
proxy_express.load
proxy_fcgi.load
proxy_fdpass.load
proxy_ftp.conf
proxy_ftp.load
proxy_hcheck.load
proxy_html.conf
proxy_html.load
proxy_http.load
proxy_http2.load
proxy_scgi.load
proxy_uwsgi.load
proxy_wstunnel.load
root@user:/etc/apache2/mods-available#

위에건 안따라쳐도됨

/etc/apache2/ 폴더 안에 mods-available 폴더랑 mods-enabled 폴더가 있는데 available에 있는 모드를 활성화시키려면 모드파일을 mods-enabled 폴더에 ln -s(링크) 시켜줘야한다. 링크라는게 그냥 대충 윈도우에서 바로가기 만드는거 비슷한거.
우리는 proxy중에서 대충 http 관련 파일들이 필요하다. proxy_http.load, proxy_http2.load 파일을 링크시킬건데 둘만 활성화해보니 오류나더라.
그래서 proxy.conf랑 proxy.load 이 두 놈도 뭔가 관련있는거같아서 같이 활성화하니 오류가 안남.

결론은 그냥 아래 따라치셈

$ sudo ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load
$ sudo ln -s /etc/apache2/mods-available/proxy_http2.load /etc/apache2/mods-enabled/proxy_http2.load
$ sudo ln -s /etc/apache2/mods-available/proxy.conf /etc/apache2/mods-enabled/proxy.conf
$ sudo ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled/proxy.load

이렇게 4개 치고

$ sudo service apache2 restart
$ sudo systemctl status apache2.service

apache2 서비스 재시작, 이후 제대로 동작중인지 확인(위 2번 참고)

4. 하위 도메인 http 활성 파일 작성

/etc/apache2/sites-available 디렉토리에 aaa.example.com.conf 파일을 만들어야한다.
자신의 도메인이 example.com이고 서브도메인 aaa를 추가해서 aaa.example.com을 포트 3000으로 연결하고싶은 경우를 가정하면 아래와 같이 작성한다.

먼저 aaa.example.com.conf(이름 알아서 잘 수정하셈) 파일을 만든다

$ sudo vi /etc/apache2/sites-available/aaa.example.com.conf

vi 에디터가 열리면서 동시에 파일이 생긴다.
i를 눌러 수정모드로 바꾸고 아래와 같이 입력해주자

<VirtualHost *:80>
	ServerName aaa.example.com
	ProxyRequests Off
	ProxyPreserveHost On
	ProxyPass / http://example.com:3000/
	ProxyPassReverse / http://example.com:3000/
    
</VirtualHost>

ESC를 누르고 :wq 엔터 차례로 눌러 저장하고 나가준다.

그다음 /etc/apache2/sites-enabled 폴더에 방금 만든 파일의 링크 파일을 만들어준다.

$ sudo ln -s /etc/apache2/sites-available/aaa.example.com.conf /etc/apache2/sites-enabled/aaa.example.com.conf


그런 다음 서비스 재시작 후 잘 작동하는지 확인

$ sudo service apache2 restart
$ sudo systemctl status apache2.service

만약 여기서 오류가 난다면 /etc/apache2/sites-available/aaa.example.com.conf 파일 쓸때 오타낸거니 다시 오타 찾아서 잘 써보시길.

어차피 sites-enabled에 넣은 파일은 sites-available 안에 있는거 링크파일이라 sites-available 안에 있는거만 수정하면 따로 다시 링크 안해도됨

그리고 여기서 서버가 껐다켜져도 다시 실행되게 부팅시 자동시작 등록해두자.

$ sudo systemctl enable apache2


5. DNS CNAME 레코드 등록

본인의 도메인 제공업체 사이트에서 DNS 설정에 들어가 다음과같이 레코드를 하나 더 등록해준다.

타입: CNAME
호스트:aaa
값/위치: example.com.

참고로 값/위치에 마지막에 점 하나 붙여줘야한다.

6. 끝

이제 aaa.example.com으로 접속해보면
example.com:3000으로 접속해야만 보였던 사이트가 나오게 된다.

물론 이때 80번 포트는 열려있어야 한다.
포트포워딩은 알아서 잘 해보셈 구글에 자료많음

7. 추가로 해주면 좋은 host 설정

$ sudo vi /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntu
127.0.0.1 example.com (이 부분을 새로 추가)

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

이렇게 /etc/hosts 파일에 example.com을 추가하면 굳이 DNS서버를 거치지 않고 로컬 환경으로 바로 연결해주어 사이트 로딩시 더 빠르게 처리된다.


다음글에서는
이상태에서 https SSL 인증서 받고 설정하는법 작성할예정

반응형