우리는 node.js로 이미 웹서버를 개발했는데 왜 또하나 더 병행해서 써야 하나?
딱 이게 궁금했는데 이 영상에서 설명해주셨다!
[Nginx] (1/2) 도대체 뭐길래 카카오, 네이버에서 사용할까
프론트 <=> 웹서버 <=> WAS <=> 데이터베이스
브라우저 <=> Nginx <=> Node.js <=> MySQL
Web Server
단순히 정적 파일을 응답 (이미지, html, css, 단순 js 파일)
WAS (Web Application Server)
- 현업에서는 웹서버라고도 불림
클라이언트 요청에 대해 동적인 처리가 이루어진 후 응답
동적인건 뭐야? 로그인할래 아이디패스워드 줄테니까 로그인시켜줘
Node.js는 웹서버로도 사용할 수 있고 was로도 사용할 수 있다
3000개의 동시 요청을 했을때와 50개의 동시 요청을 했을때 메모리 사용량이 거의 비슷함
초당 요청 처리: 동접자가 많아질 수록 다른 것에 비해 처리할 수 있는게 많다. 굉장히 빠르다
프록시: 대리
리버스 프록시를 사용하면 왜 좋나?
2-1 로드 밸런싱
: 사용하는 앱서버가 여러대일 때 어떤 요청이오면 클라이언트1너는 얘, 2번너는 얘 이런식으로 길을 정해줌
2-2 캐싱 서버
역할: 이미지를 요청했을때 너 뒷단까지 갈 필요 없어 내가줄게~
2-3 보안
: WAS가 응답할때 그 응답에는 굉장히 많은 데이터들이 들어있음. 외부에서는 어디서 이 데이터가 온건지 알 수 없게끔, 암호화 해주는 기능을 리버스프록시가 할 수 있다.
2-4 SSL을 지원
: 우리사이트는 보안이 잘돼있다. 인증해. nginx가 https 인증서를 제공해 줄 수 있다.
https도 nginx를 쓰면 쉽게 설정할 수 있구나~
2-5 웹페이지 접근을 인증
해준다: 로그인 정보가 올바른 정보인지 WAS에서 검증할 수 있는데 굳이 WAS에서 하지 않고 Nginx에서 해줄 수 있다. 너는 관리자야~ 너는 관리자 아니고 사용자야~
2-6 압축
: 클라이언트가 보내는 내용이 텍스트타입을 압축해서 전달해줄 수 있다
2-7 이벤트루프 방식
사용: node.js도 이벤트 루프라는 녀석이 비동기로 동작하도록 해줌, 비동기 방식으로 동작을 해서 상당히 많은 트래픽을 동시에 처리할 수 있다. 10000개의 트래픽까지
등등의 기능
nginx도 비동기, Node.js도 비동기 => 둘은 환상의 조합
Nginx를 Proxy 서버로 앞단에 두고 Node.js를 뒷단에 두면, 버퍼 오버플로우 취약점에 의한 공격을 방지할 수 있다 -Node.js 창시자, 라이언 달-
버퍼 오버플로우? 버퍼(메모리: 스택과 힙이 메모리 안의 구조로 있다)는 할당돼있는 한계점이 있는데 그 한계를 넘어가면 오버플로우 된다
완전 이해가 쏙쏙가는 그림
http로 통신하면 엔진엑스의 80번 포트에서 443포트로 redirect 시켜줌.
443에서는 노드의 5000으로 갈 수 있게 해줌
http로 접속해도 https로 접속하게 해주는 효과
sudo apt-get update
sudo apt-get upgrade -y #OS install
sudo apt-get install nginx
sudo service nginx start
cd/etc/ngins/sites-enabled
sudo rm default
sudo vi default
# 설정파일 안에 들어가서 설정 지우고 내가 만든 설정 추가
server{
listen 80;
server_name idu-market.shop;
# access_log /var/log/nginx/reverse-access.log;
# error_log /var/log/nginx/reverse-error.log;
if ($host = idu-market.shop) {
return 301 https://$host$request_uri:
}
}
server {
listen 443 ssl: #인증서 설정을 해주겠다
server_name idu-market.shop:
# access_log /var/log/nginx/reverse-access.log;
# error_log /var/log/nginx/reverse-error.log;
location / {
proxy_pass http://127.0.0.1:5000; #5000번포트로 우회시켜주겠다
}
sudo service nginx restart
생각1 : SSL 적용, cloudflare로 할 것인가 let's Encrypt로 할것인가.
let's encrypt
장점1) 무료, 인증서 갱신 자동
생각2: 어떤 사용자인지 접근 권한 인증해주는건 우리 페이지에 적용해볼만한 기능인 것 같다.