기술 검토(?) 겸, 이틀간 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 흐으음............ 나중에 좀 정리해서 따로 적어야 할 듯!