소개
읽기 : 엔진 엑스
아파치와 함께 세계에서 가장 많이 쓰고 있는 웹서버 중 하나
비동기 처리 방식
동시접속자(약 700명) 이상이라면 서버를 증설하거나 Nginx 환경을 권장
역할
프록시 서버 : 서버와 클라이언트 사이에 대리로 통신을 수행하는 중계 기능을 하는 것
포워드 프록시 : 내부망에 함께 있는 클라이언트가 인터넷을 통해 어딘가에 있는 서버로 요청을 보내려고하면 이 요청을 받아 연결. 클라이언트 앞단에서 요청을 처리. 서버에게 클라이언트가 누구인지 감추는 역할. 서버가 응답받은 IP는 포워드 프록시 서버의 IP
리버스 프록시 : 인트라넷 서버 앞단에서 요청을 처리. 서버가 누구인지 감추는 역할. 내부망의 서버는 DB와 연결 되어있으므로 최전방에 있으면 보안에 취약해 지기 때문에 사용. 클라이언트는 리버스 프록시 서버를 먼저 호출하게 되기 때문에 실제 서버의 IP를 알 수 없다.
장점
보안 : IP를 숨기고 프록시 서버의 IP만 공개함으로써 해킹에 대비
트래픽 분산 :
성능 : 캐싱과 트래픽 분산을 통해 성능 향상
설치 방법
sudo apt-get install nginx
nginx.conf
파일에서 설정을 조작할 수 있다
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
server {
listen 80;
location / {
root html;
index index.html index.htm;
}
}
}
worker_processes
: 몇개의 워커 프로세스를 생성할 것인지 지정하는 지시어. 1이면 모든 요청을 하나의 프로세스로 실행하겠다는 뜻. CPU 멀티코어 시스템에서 1이면 하나의 코어만으로 요청을 처리하는 셈이다. auto로 놓는 경우가 많다.
events - worker_connections
최대 접속자수 = worker_processes
X worker_connections
http
블록 : 하위에 server 블록, 그리고 location 블록을 갖는 루트 블록 이다. 여기서 선언된 값은 하위 블록에 상속된다. 서버의 기본값이 된다.
include
: server 블록에서도 사용할 수 있다. conf.d
에 정의해놓은 파일들을 적용하는데 사용된다.server
블록: 하나의 웹사이트를 선언하는데 사용된다. server 블록이 여러개이면, 한대의 머신(호스트)에 여러 웹사이트를 서빙할 수 있다.
location
블록 : 요청을 배분
캐싱
server {
...
# 로컬 설정, 웹페이지, api 요청등은 캐싱하지 않고 매번 새로운 자료로 제공한다.
location ~* \\.(?:manifest|html?|php?|xml|json)$ {
expires -1;
}
# 홈페이지를 구성하는 스타일, 스크립트는 1달 정도 캐싱한 후 새로운 정보를 제공한다.
location ~* \\.(?:css|js)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}
# 홈페이지를 구성하는 이미지등의 리소스는 변화가 거의 없으므로 한 번 다운로드하면 3달 정도 캐싱한다.
location ~* \\.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 3M;
access_log off;
add_header Cache-Control "public";
}
}
expires : 캐시가 만료되는 일자, 일, 월, 년 단위
add_header Cache-Control "public", max-age=[초];
초 단위로도 사용 가능
access_log : 해당 파일을 읽어들일때 로그를 남기는지 여부
로드 밸런싱
가상 호스트 : 실제로 호스트는 한대지만, 가상으로 마치 호스트가 여러개 존재하는 것처럼 동작하게 함