매 요청마다 프로세스나 쓰레드가 생성되는 것이 아니라 비동기 이벤트 기반의 구조로 작동한다.
1. 정적 파일을 처리하는 HTTP서버로의 역할
2. 응용 프로그램 서버에 요청을 보내는 리버시 프록시
3. 비동기 처리방식
서버가 정상인지 확인하는 작업을 의미한다. 능동적(Active) 방식과 수동적(Passive) 방식으로 나뉜다. Passive 방식만 무료 오픈소스 버전에서 사용가능하다.
max_fails 매개변수와 fail_timeout 매개변수로 조정한다.
NGINX 뒷단에 있는 실제로 서비스 로직 처리하는 원 서버를 의미.
proxy-pass 지시자를 통해 nginx가 받은 request를 넘겨줄 서버들을 정의한다.
nginx와 뒷단 application을 연결하는 내부 통신에도 request마다 세션을 만들고 TCP Handshaking가 일어난다. 그리고 이는 응답속도 지연이 될 가능성이 있다.
i) 다수의 TIME-WAIT 소켓
ii) 불필요한 TCP HandShaking
access_log : /var/log/nginx/access.log
error_log : /var/log/nginx/error.log
server {
listen 80;
server-name localhost;
location / {
proxy-pass http://localhost:40001;
}
}
upstream backend {
server ~~:40000 weight = 1;
server localhost:40002 weight = 2;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://backend;
}
}
1번의 방법을 제외하고는 작업이 다른 특성을 갖거나, 뒷단의 서버가 다른 스펙을 갖는 경우에 고려해봄직 하다.