Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

express에서 도메인별로 다른 express서버 사용하기

웹사이트를 구축하다보니 서브도메인을 사용할 필요가 있었습니다. 물리적 서버는 한대이지만 여러개의 도메인이 필요한 경우도 있고 서브도메일별로 여러가지 사이트를 띄워야 할 필요도 있습니다. 기본적으로 express의 서버는 포트만 지정해서 기동하기 때문에 여러개의 express 서버를 만들더라도 포트가 다르게 되는데 사용자에게 포트까지 노출하는 것은 그다지 좋은 생각이 아닙니다.

express에는 vhost기능이 있어서 이런 상황에서 도메인별로 서비스할 수 있도록 제공해 주고 있습니다. 메일링을 통해서 알게 되었는데 왠지 모르게 가이드문서에는 vhost에 대해서는 따로 나와있지 않습니다.


var express = require('express'),
      site1 = express.createServer(),
      site2 = express.createServer(),
      site_vhosts = [],
      vhost;

site_vhosts.push(express.vhost('example.com', site1));
site_vhosts.push(express.vhost('sub.example.com', site2));

vhost = express.createServer.apply(this, site_vhosts);

site1.listen(8080);
site2.listen(8090);
vhost.listen(80);

위와같이 사용하면 됩니다. site_vhosts라는 배열을 만들어서 도메인과 express서버를 맵핑한 vhost를 배열에 추가해줍니다. 이 배열을 express서버에 적용해 주고 3개의 웹서버를 모두 시작해 줍니다. 이렇게 하면 웹사이트로 들어온 요청을 vhost서버가 받아서 도메일별로 각 서버로 연결해 줍니다. 여기서는 site1, site2의 서버를 소스에서 바로 생성했지만 일반적으로 파일을 불리해서 require()로 불러오면 됩니다.(물론 require()로 불러서 사용하려면 해당 서버가 module.exports로 정의되어 있어야 합니다.)

8080과 8090포트를 url에 노출시키지 않고 vhost의 80만 사용해도 example.com으로 들어온 요청은 site1 서버가 처리하고 sub.example.com으로 들어온 요청은 site2서버가 처리하게 됩니다.
2011/01/27 01:17 2011/01/27 01:17