웹 서버를 사용해야하는 이유
1. 정적 파일을 서빙하는 서버 역할
2. 리버스 프록시로서 역할
프록시란?
프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. (서버와 클라이언트의 중계기)
프록시는 크게 Forward proxy와 Reverse Proxy 로 나뉜다.
Forward Proxy
클라이언트가 인터넷에 직접 접근하는 것이 아니라 포워드 프록시 서버가 요청을 받고 인터넷에 연결하여 결과를 클라이언트에 전달(forward)해준다.
Reverse Proxy
클라이언트가 인터넷 데이터를 요청하면 프록시가 이 요청을 받아 내부 서버에서 데이터를 받은 후 클라이언트에게 전달한다.
클라이언트는 내부 서버에 대한 정보를 알 필요 없이 리버스 프록시에만 요청하면 된다.
내부 서버(WAS)에 직접적으로 접근한다면 DB에 접근이 가능하기 때문에 중간에 리버스 프록시를 두고 클라이언트와 내부 서버 사이의 통신을 담당한다.
차이점
1. End Point
forward proxy는 클라이언트가 요청하는 end point가 실제 서버 도메인이고 프록시는 둘 사이의 통신을 담당함
Reverse proxy는 클라이언트가 요청하는 end point가 프록시 서버의 도메인이고 실제 서버의 정보를 알 수 없다
2. 감춰지는 대상
Forward proxy는 클라이언트가 감춰진다.
요청받은 서버는 포워드 프록시 서버를 통해서 요청받기 때문에 클라이언트 정보를 알 수 없다.
Reverse Proxy는 반대로 서버가 감춰진다.
클라이언트는 리버스 프록시 서버에게 요청하기 때문에 실제 서버의 정보를 알 수 없다.
근데 웹 서버는 왜 프록시를 사용하냐면 직접 was에 연결하면 그 서버의 DB를 쉽게 알아버릴 수 있기 때문이다
이제 nginx 같은 웹 서버가 무슨 역할을 하는지 알았으니
nginx 핵심 파일들
nginx.conf 파일
- nginx의 설정이 들어가는 핵심 파일
conf.d 폴더
- nginx.conf 에서 include로 불러올 수 있는 conf 파일 저장 폴더
nginx 설정 파일 보기
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
server {
listen 80;
location / {
root html;
index index.html index.htm;
}
}
}
worker_processes는 몇 개의 워커 프로세스를 생성할 것인지 지정하는 지시어이다(이런 것들을 core module이라고 한다)
events 블록: 이벤트 블록은 네트워크 동작 방법과 관련된 설정이다
worker_connections: 하나의 프로세스가 처리할 수 있는 커넥션의 수
즉 최대 접속자 수는 worker_processes X worker_connections
http 블록: 하위에 server 블록, 그리고 location 블록을 갖는 루트 블록이다. 여기서 선언된 값은 하위 블록 상속된다.
저기있는 include는
server 블록에서도 사용할 수 있다. 그리고 conf.d에서 정의해 놓은 파일들을 적용하는데 사용한다.
upstream 블록: origin 서버라고도 한다 여기서는 WAS를 의미하고 nginx는 downstream에 해당한다고 할 수 있다. 여러 서버를 지정하고 weight 을 정할 수 있다.
위에 그림처럼 여러 개의 upstream을 만들 수 있다. 어떤 요청은 A로, 다른 요청은 B로 보내고자 할 때 쓰인다.
대표적으로 api 서버를 지정하고, FE에서 특정 location 요청을 procy 할 때 쓰인다.
upstream backend {
server backend.juneyr.dev:443;
keepalive 100;
}
server {
listen 80;
server_name fe.juneyr.dev;
location /v1 {
proxy_pass https://backend;
}
Server의 값으로 host주소: 포트
keepalive: keepalibe로 유지시키는 최대 커넥션 수
server 블록: 하나의 웹 사이트를 선언하는 데 사용된다. server 블록이 여러 개면, 한대의 머신(호스트)에 여러 웹 사이트를 서빙할 수 있다.
이런 개념을 가상 호스트라고 한다. 실제로는 호스트는 한대지만, 가상으로 마치 호스트가 여러 개 존재하는 것처럼 동작하게 할 수 있다.