기술 검토(?) 겸, 이틀간 node.js 를 이용해서 이런 저런 스터디 & api 개발을 했다.

 

이제, 서버에 올려야 하는데......

 

일단 첫번째 장벽 발생.

 

기존 APM 이 동작중인 상태에서, node.js 로 작성된 서버가 '같이 잘 살아야'만 하는 상황이 됨.

 

조금 찾아보니...

 

1. 내부적으로 다른 포트에 node.js 기반의 (다른것도 물론 가능) 서버를 열고,

2. apache 의 VirtualHosts 설정에서 ProxyPass 를 설정해서,

3. 특정 url 로 접근시, 1번으로 '돌려주는' 것.

4. 외부에서 보면, 특별히 변화 없음. 내부적으로만 돌려막기(?) 하는 동작으로 보임. :)

 

자, 이제 설정을 해보자.

 

먼저 준비물 - module - 2개.

 

 mod_proxy, mod_proxy_http

 

1. ubuntu apache 서버는 기본적으로 두 모듈이 '설치'가 되어있음.

 

/etc/apache2/mods-available

 

 - 이 안에, proxy, proxy_http 설치된 상태.

 

 - 실제 설치는, 내부적으로는 ./mods-enabled 에 sort link 해주면 됨.

 - 이경우, 직접 하기 보다, '명령어'를 이용하는게 그냥, 맘이 놓이니...

 

 sudo a2enmod proxy 

 sudo a2enmod proxy_http

 

./mods-enabled 안에서 소프트 링크 확인.

 

 

2. 가상 호스트 설정.

 

 ./sites-available 내부의 기존파일 혹은 신규 파일 추가.

 

 다음 내용 추가, 수정 등등 적당히.

 

<VirtualHost *:80>

DocumentRoot /var/www/example.com/public_html

ServerName  www.example.com

 

# Index file and Document Root (where the public files are located)

DirectoryIndex index.html index.php

 

# Log file locations - 아래는 필요하다면.. :)

LogLevel warn

ErrorLog  /var/www/amazeapp.com/log/error.log

CustomLog /var/www/amazeapp.com/log/access.log combined

 

 

# 여기서 부터 본격적 추가.

 

ProxyRequests off

 

<Proxy *>

   Order deny,allow # 이부분의 경우, 콤마(,) 사이에 공백 없어야 함!

   Allow from all

</Proxy>

 

<Location /> # 내부적으로 접속 노드를 늘리고 싶다면 여기에 추가. :)

   ProxyPass http://localhost:3000/

   ProxyPassReverse http://localhost:3000/

</Location>

 

</VirtualHost>

 

 

 - 최종적으로 추가해야 하니, 다음과 같이 사이트를 가능하게 합시다!

 

 sudo a2ensite 파일명 (신규 추가의 경우만.)

 

3. 아파치, 재시작.

 

결론.

 

 잘 됨. 나머지 한가지는 '직접' 연결시 https redirect 설정 부분(얼핏 봤을때 VirtualHost)에 추가로 기억. :)

 

 덧붙여서 https 를 cloud flare 의 flexable ssl 접근시, node.js 쪽 pass direct 설정이 필요하다고 함.

 X-Forwarded-For 를 header 에 포함해주면 서버가 클라이언트의 '진짜' ip 확인 가능 하다고 기억함.

X-Forwarded-For 은 충분히 header 에서 언제든 조작이 가능하기떄문에 진짜 ip 가 아닌 클라이언트의 ip 를 가져올 수 있는 방법

 

 

레퍼런스.

 http://garrows.com/blog/running-node-js-and-apache-together-using-mod_proxy/

 https://github.com/sindresorhus/guides/blob/master/run-node-server-alongside-apache.md

 http://stackoverflow.com/questions/28062159/node-js-https-on-cloudflare

 

 

뱀발.

 node.js 흐으음............ 나중에 좀 정리해서 따로 적어야 할 듯!

Posted by 코나

댓글을 달아 주세요

  1. apache2 node.js 리버스 프록시 구글링하다 우연히 보게되었습니다.

    결론 밑의 글 부분을 한번 봐밨는데요
    =============
    덧붙여서 https 를 cloud flare 의 flexable ssl 접근시, node.js 쪽 pass direct 설정이 필요하다고 함.

    X-Forwarded-For 를 header 에 포함해주면 서버가 클라이언트의 '진짜' ip 확인 가능 하다고 기억함.
    =============

    이런게 말씀해주셨는데
    X-Forwarded-For 은 충분히 header 에서 언제든 조작이 가능하기떄문에 진짜 ip 가 아닌 클라이언트의 ip 를 가져올 수 있는 방법이라고 정정해주실 수 있을까요?

    해당 글으로 로컬 환경을 x-forwarded-for 으로 제한하거나 하는 경우에 충분히 취약점이 될 수 있다고 생각합니다.

    2021.01.08 21:24 [ ADDR : EDIT/ DEL : REPLY ]
    • 좋은 말씀 감사드립니다.

      이쪽에는 거의 로그인을 하지 않다가, 오래간만에 와서 말씀해 주신 내용을 간단히 본문에 추가하였습니다. :)

      2021.10.01 04:37 신고 [ ADDR : EDIT/ DEL ]