프로젝트
[NGINX] NGINX를 nodejs express의 reverse proxy로 사용하기
학학이
2016. 3. 27. 14:49
reverse proxy란 ~
프록시는 일반적으로 원활하게 여러 서버간에 부하를 분산 다른 웹 사이트의 콘텐츠를 표시하거나 HTTP 이
외의 프로토콜을 통해 응용 프로그램 서버에 처리 요청을 전달하는 데 사용된다.
NGINX에 요청을 프록시로하면, 지정된 프록시 서버에 요청을 보내고 응답하고, 클라이언트에게 전송한다.
참고 : NGINX 공식 홈페이지 https://www.nginx.com/resources/admin-guide/reverse-proxy/
전제 조건
- Node.js 와 Npm이 설치 되어있어야한다.
- pm2 설치
- express-generator 로 프로젝트 만들기
- NGINX 설치
만얀 ~/test 라는 프로젝트를 만들었다면
$ cd test
$ pm2 start bin/www 로 pm2를 실행한다.
여기서 bin/www로 실행하는 것이 중요하다 test/app.js로 실행해도 가능하나 NGINX를 reverse proxy로 사용할 때는 502 bad gateway 에러가 난다. 이유는 더 찾아봐야겠다.
$ sudo vi /etc/nginx/sites-available/default 를 입력해서 default 파일을 수정한다.
수정전에 기본 default 파일은 따로 이름을 바꿔 저장해두는 것이 좋다. 원본은 유지하자!!
/etc/nginx/sites-available/default
내용을 모두 날리고 다음과 같이 입력한다.
server {
listen 80;
server_name 도메인;
location / {
proxy_pass http://127.0.0.1:3000;
#proxy_pass http://naver.com;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
도메인 이라고 된 부분이 중요하다. 이곳에 사용할 서버의 도메인을 입력한다.
ex) server_name gachon.ga www.gachon.ga;
만약 현재 express 앱의 포트가 3000번이 아니면 그 것으로 변경한다.
ex) proxy_pass http://127.0.0.1:8080;
vi를 저장 종료한다.
default 파일이 바뀌었다고 바로 NGINX 서버에 반영되지 않는다.
$ sudo /etc/init.d/nginx restart
명령어를 입려서 NGINX를 재시작한다.
OK가 뜨면 브라우저에 도메인을 입력해본다.
성공했다면 기본 NGINX defualt 페이지가 아닌 express default 페이지가 나온다.