냐냐한 IT/냐냐한 실습 기록

Amazon EC2 Windows 인스턴스에 NodeJS -> Express, 라우팅, vhost

소소하냐 2020. 6. 20. 19:20

공식 사이트 URL : https://expressjs.com/ko/ [새창] 

 

(Node.js 가 설치되어있어야 함)

 

시작하기 

 

> Windows 인스턴스에 원격으로 연결

> Command Prompt

> 애플리케이션 폴더 생성 및 이동 

> 해당 폴더에서 아래 명령어로 애플리케이션 설정 (저는 기본 설정 그대로 생성)

$ npm init

> 'package.json' 파일이 생성된 것을 확인할 수 있다. 

> 아래 명령어로 express 설치 

$ npm install express --save

    * 저의 경우 기본 설정의 name; (express)로 되어있어 오류가 발생했습니다. package.json 파일에서 name을 변경하고 설치하니 제대로 설치가 되었습니다. 

 

> 'node_modules' 폴더 생성 및 package.json 파일이 변경된 것을 확인 

 

 

Hellow world 

 

* 'package.json' 파일에 main 이 'index.js' 로 설정되어 있음 (기본 설정으로 해서)

* 공식문서에서는 'app.js'로 main을 설정하였지만 저는 그대로 사용하기로 하였습니다. 

 

> 애플리케이션 폴더에 'index.js' 파일을 아래와 같이 작성 (port 는 80으로 변경) 

const express = require('express')
const app = express()
const port = 80

app.get('/', (req, res) => res.send('Hello World! Express'))

app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))

> 아래 명령어를 이용해 애플리케이션 실행 

$ node index.js 

> 브라우저에서 http://localhost 로 결과물 확인 

> 외부에서 http://xxx.xxx.xxx.xxx 또는 http://도메인명 으로 연결 > 연결 성공 

 

 

라우팅 

* 루트 URL로 접속 시 'index.html' 화면을 보여주고 싶은 상태 

 

> 애플리케이션 폴더에 'index.html' 파일 생성 후 간단하게 내용 입력 후

> 'index.js' 파일을 아래와 같이 수정

const express = require('express')
const app = express()
const port = 80

app.get('/',function(req,res){
        res.sendFile(__dirname + '/index.html') // <-- sendFile, __dirname 
     });

app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))

 

> 기존 애플리케이션 종료 후 다시 실행

> 브라우저에서 http://localhost로 연결하여 'index.html' 내용이 정상적으로 출력되는 것을 확인 

 

 

도메인 별로 다른 서버로 서비스 (vhost 사용) 

 

> 아래 명령어를 이용해 vhost 설치 

$ npm install vhost --save

> sub 도메인용 'subindex.html' 파일 생성 후 간단하게 내용 입력

> 'index.js' 파일을 아래와 같이 수정

const express = require('express')
const vhost = require('vhost')

const main = express()
const sub = express()
const app = express()

const port = 80

main.get('/',function(req,res){
        res.sendFile(__dirname + '/index.html') 
     });
     
sub.get('/',function(req,res){
        res.sendFile(__dirname + '/subindex.html') 
     });
     
app.use(vhost('example.com', main));
app.use(vhost('sub.example.com', sub));
app.use(vhost('localhost', main)); // local에서 확인하기 위해 추가함
      
app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))

 

> 기존 애플리케이션 종료 후 다시 실행

> 브라우저에서 http://localhost 로 연결하여 'index.html' 내용이 정상적으로 출력되는 것을 확인 

> 각 도메인으로 접속하여 설정한 페이지가 제대로 표시 되는 것을 확인