노드js 가상호스트 이용하기, node.js 가상호스트
한 서버에서 여러 웹 서비스를 운용해야 하는 경우가 있습니다.
단순히 도메인이 여러개라서 한 도메인으로 사용자를 전달한다거나, 사용자 페이지와 백 오피스를 함께 운용할 수도 있지요.
이런 경우 Apache나 Nginx를 이용한다면 설정 파일을 이용해서 VirtualHost를 활용하곤 합니다.
만약 모든 서비스가 Node.js로 운용되고 있다면 굳이 Apache나 Nginx를 찾지 않고도 VirtualHost를 사용할 수 있습니다.
사전 준비: hosts 파일 편집
hosts 파일은 로컬에 보관하는 일종의 전화번호부입니다.
DNS 동작에서의 hosts 파일 역할에 대한 자세한 설명은 다음 링크에서 확인하실 수 있습니다: hosts 파일 - 생활코딩
hosts 파일은 아래 위치에서 찾을 수 있습니다.
- Windows: %SystemRoot%\system32\drivers\etc\hosts
(예. Windows가 C드라이브에 설치된 경우는 C:\windows\system32\drivers\etc\hosts)
- *nix: /etc/hosts
hosts 파일 하단에 아래 3줄을 추가하고 저장합니다. 이 때 관리자 권한이 필요할 수 있습니다.
아래 세 줄은 오른쪽의 도메인을 왼쪽의 IP, 즉 현재 PC, 다시 말하자면 localhost로 연결한다는 의미입니다
127.0.0.1 e2j.jetalab.internal127.0.0.1 mail.jetalab.internal127.0.0.1 jetalab.internal아래는 터미널을 이용해서 hosts 파일을 편집하는 예시입니다.
1. vim, nano 등의 에디터로 hosts 파일을 엽니다.
2. 하단에 앞서 기록된 3줄을 입력합니다.
사전 준비: 의존성
1. 아래 명령어를 입력하여 필요한 패키지를 설치합니다.
- npm i --save express vhost
실습
1. 이전 예제들을 활용할 수 있도록 일부 변경합니다.
- 이전 예제들은 모두 3000 포트를 이용하도록 지정되어 있었습니다. 지정된 포트를 다른 포트로 변경하거나, 서버 실행 코드를 삭제합니다.
- 이전 예제들의 app.js 파일 하단에 아래 코드를 추가하여 모듈로 내보냅니다.
- module.export = app;
2. Sample Code: 아래 코드를 app.js로 저장합니다.
const express = require('express');
const vhost = require('vhost');
const excel_to_json = require('../excel-to-json/app');
const mailer = require('../mailer/app');
const app = express();
app.use(vhost('e2j.jetalab.internal', excel_to_json));
app.use(vhost('mail.jetalab.internal', mailer));
app.use(express.static('static'));
app.use((req, res) => {
res.status(404).send('Page Not Found!')
});
app.listen(3000, () => {
console.log('HostManager listening on port 3000');
});
app.js:9: e2j.jetalab.internal로 접속한 경우 excel-to-json app을 연결합니다.
app.js:10: mail.jetalab.internal로 접속한 경우 mailer app을 연결합니다.
app.js:12: 이외의 요청인 경우 static 폴더의 정적 파일을 서비스합니다.
app.js:14~16: 어떤 서비스로도 처리되지 않는 경우 'Page Not Found!' 메시지를 전송합니다.
3. 터미널에서 아래 명령어를 입력하면 서버가 실행됩니다.
- node.app.js
3. 터미널에서 아래 명령어를 입력하면 서버가 실행됩니다.
excel-to-json과 mailer 서버가 실행된 것을 볼 수 있습니다.
4. http://e2j.jetalab.internal:3000 도메인으로 접속하면 excel-to-json 화면이 표시됩니다.
5. 마찬가지로 http://mail.jetalab.internal:3000 도메인으로 접속하면 메일 발송 화면이 표시됩니다.
6. http://jetalab.internal:3000 으로 접속한 경우 static 디렉토리 내부의 정적 파일을 서비스 합니다.
/static/index.html 파일을 추가하고 접속한 화면입니다.
GitHub
본 강의에 사용한 코드는 GitHub에 공개되어 있습니다.
https://github.com/jETA-Kor/examples
참고 문서
- hosts 파일 - 생활코딩: https://opentutorials.org/course/228/1457
- vhost - npm: https://www.npmjs.com/package/vhost
출처: https://jetalog.net/73?category=741674 [jetalog.net]