[AWS] AWS with Nginx and Nodejs

NodeJS와 Nginx 프록시

보통 NodeJS를 이용해서 Front-end 서버를 이용하는 경우에는 3000 port를 사용하고 API 서버는 잘 사용하지 않는 Port를 이용하는 경우가 많다. ( 물론 이것도 굉장히 주관적이고 프로젝트에 따라서 다르니 참고만 하면 된다. )

일단 기본적으로 AWS의 인바운드 규칙에 3000에 대해서 포트를 열어놨다라는 가정하에 진행합니다.

Nodejs 서버 기본 세팅

일단 기본적으로 NodeJS에서는 express를 이용하여 서버를 띄우는 데 이때 3000번을 사용합니다.

const express = require("express");
const app = express();
const port = 3000;

const server = app.use(express).listen(port, ()=>{
    console.log(`Express Server has started on port : ${port}`)
});

그렇게 되면 현재 Node 서버는 3000에 대해 Listen하고 있는 상태입니다.

Nginx 서버 기본 세팅

기본적으로는 Nginx는 기본 80번 포트로 설정되어 있다. 이 때 사용자가 url을 치고 들어왔을때, nginx에서 3000번으로 보내주면 된다. 그러게 하기 위해선 일단 nginx의 config를 수정해야한다.

$ sudo vi /etc/nginx/conf.d/default.conf

sudo권한으로 config 설정파일로 들어가면 기본 설정으로 location에 아래와 같이 되어 있다.

location / {
  root   /usr/share/nginx/html;
  index  index.html index.htm;
}

그 부분을 주석 처리 한후, 하단에 proxy 설정을 붙여넣는다. 위에서 nodejs 포트를 3000으로 설정해줘서 여기에서도 마찬가지로 3000번으로 넣어줬다. 만약 Port를 다르게 이용한다면 그 부분만 확인해서 수정하면 된다.

location / {
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  proxy_set_header X-NginX-Proxy true;
  proxy_pass http://127.0.0.1:3000/;
  proxy_redirect off;
}

sudo service nginx restart

위와 같이 설정한 후 nginx 서버를 재실행하면 url로 치고 들어갈 때 뒤에 포트를 안붙여도 들어가지는 것을 볼 수 있다.

Comments