설명하기에 앞서. 이 글을 적는 이유는
1. 각각의 기능들에 대해 공식docs 를 참고하여(즉 정확하게) 최대한 디테일하게, 공부하기 위함 최대한 초심자에 맞춰(본인이 초심자이기에)설명
2. 추후 100% 까먹을테니 정리하기 위함
ps.기능 및 옵션들은 회사에서 사용되는 옵션들(회사에서 직접 개발된 모듈들은 설명X, 사내 WIKI에 기재)
참고 URL :
http://nginx.org/en/docs/ngx_core_module.html
worker_processes / Context : main
실행할 워커 프로세스 갯수 정의 , cpu 코어 갯수( cat /proc/cpuinfo | grep proce| wc -l)대로 하는게 좋다
ex) worker_processes 4;
.4로 지정하는경우 아래와 같이 워커 프로세스 4개 실행됨
root 21554 1 0 2019 ? 00:08:31 nginx: master process /usr/local/nginx/sbin/nginx
nobody 40544 21554 0 10:31 ? 00:00:00 nginx: worker process
nobody 40545 21554 0 10:31 ? 00:00:00 nginx: worker process
nobody 40546 21554 0 10:31 ? 00:00:01 nginx: worker process
nobody 40547 21554 1 10:31 ? 00:00:04 nginx: worker process
The auto parameter is supported starting from versions 1.3.8 and 1.2.5.
worker_rlimit_nofile / context : main
워커 프로세스가 사용 할 수 있는 최대 파일 갯수, worker conntercions의 3~4배가 적당하다고 함,
ex) worker_rlimit_nofile 32768;
worker_connections / context : events
하나의 워커 프로세스당 최대 동시 연결 수, 클라이언트와의 연결 뿐 아니라 모든 연결이 포함됨(즉 아파치/nginx 프록시로 연결돼있을 경우 클라이언트 > nginx 1개, nginx > apache 1개 총 2개의 커넥션이 사용됨)
OS의 최대 오픈 파일 갯수(cat /etc/security/limits.conf | egrep -i "soft|hard" | grep -v "#" )를 넘으면 안된다.
ex) worker_connections 8192;
server_tokens
서버 response header 에 nginx 버전 활성화 여부, 보안상 off 추천
ex) server_tokens off;
server_names_hash_max_size(
server name 의 최대 해시 사이즈 설정
ex) server_names_hash_max_size 2048;
server_names_hash_bucket_size
server name의 최대 버킷 사이즈 설정
ex) server_names_hash_bucket_size 256;
###해시와 버킷이란, nginx 에서는 어떻게 사용되는지 ?
먼저 hash 를 예를 들자면 nginx 의 vhost 설정하기 위해 server_name 이 아래와같이 여러개가 있을경우
server_name test1.kr www.test1.kr
server_name testtest2.kr www.testtest2.kr
server_name t3.kr www.t3.kr
등등...
test1.kr www.test1.kr > aaaa1111
testtest2.kr www.testtest2.kr > bbbb2222
t3.kr www.t3.kr > cccc3333
위와같이 어떤 크기의 데이터든 일정한 크기의 고유 문자열로 변경한다. 따라서 어떠한 크기의 데이터든 일정한 크기의 고유 문자열과 1:1 매칭이 돼 있기 때문에 "testtest2.kr"를 불러오는것보다 bbbb2222를 불러오는게 더욱 빠르게 처리 된다. (암호화에도 도움이 되지만 엔진엑스에서는 암호화때문에 사용하는건 아닌듯?)
엔진엑스에서는 server_name, map 지시어, mime type, reqest header 문자열 등의 정적 데이터들을 빠르게 처리하기 위해 해쉬 테이블을 사용한다.
해쉬 테이블은 해쉬 함수를 이용해서 키를 해쉬로 바꾸고 바꿔진 해쉬와 매칭된 value가 저장되있는 버킷들
즉 server_names_hash_max_size 는 test1.kr testtest2.kr 과 같은 키들의 사이즈라 생각하면 편하고
server_names_hash_bucket_size 는 vhost 들의 갯수라 생각하면 된다.
set_real_ip_from / real_ip_header
ex)
real_ip_header X-Forwarded-For;
set_real_ip_from 127.0.0.1;
set_real_ip_from 172.16.253.10;
set_real_ip_from 172.16.253.14;
프록시 사용할경우 실제 주소를 확인하기 위한 설정
map
공식 독스 설명에는 변수에 따라 값이 달라지는 변수를 생성 한다(string를 받아서 value 를 매핑) 라고 나와있다. 쉽게 말하면 특정 아이피,도메인,대역등을 변수로 지정(string) 후 그 변수들을 접속 허용, 차단 또는 지정된 변수는 로깅을 하지 않는다 등을 한다고 보면 될듯 하다.
ex)
https://sub0709.tistory.com/110
gzip
ex)
gzip on;
gzip_proxied any;
gzip_http_version 1.1;
gzip_min_length 1100;
gzip_comp_level 5;
gzip_buffers 16 32k;
gzip_vary on;
gzip_disable "msie6|Yeti";
전송 데이터를 줄이기 위해 gzip 을 이용하여 리퀘스트를 압축하는 모듈
proxy
https://12bme.tistory.com/367 설명 잘 돼 있음
vts
https://blog.naver.com/ncloud24/221598840260