Nginx에 대한 개념은 아래의 포스팅에서 간단하게 알아보았고, 다음으로 Nginx의 설정 값들에 대해서 알아보도록 하겠습니다. ( https://kkang-joo.tistory.com/29 )
Nginx의 동작 방식은 configuration file에 의해서 결정됩니다.
해당 configuration file이 nginx.conf 파일입니다.
일반적으로 많이 사용하는 apt-get을 이용하여 설치하는 경우 "/etc/nginx"에서 찾을 수 있습니다.
mac에 brew를 이용하여 설치한 경우에는 "brew ls nginx" 명령어를 치시면 설치된 위치를 확인할 수 있습니다.
nginx 설정은 nginx 공식 홈페이지에 설명이 되어있는데, 그중에서 자주 사용되는 설정들을 간단하게 알아보도록 하겠습니다. (http://nginx.org/en/docs/ngx_core_module.html)
기본 설정
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
server {
listen 80;
location / {
root html;
index index.html index.htm;
}
}
}
흔하게 볼 수 있는 기본 설정입니다.
위의 설정은 크게 5가지 영역으로 구분 할 수 있습니다.
- Core 모듈
- 설정 파일의 최상단에 위치하고, nginx의 기본적인 동작 방식을 정의합니다
- http블록
- server 블록
- 하나의 웹 사이트를 선언하는데 사용횝니다
가상 호스팅(virtual host)의 개념
- location 블록
- server 블록 내에서 특정 URL을 처리하는 방법을 정의합니다
- events 블록
- 주로 네트워크 동작에 관련된 설정을 하는 영역입니다
Core 블록
user nginx;
worker_processes 2;
worker_priority 0;
# 로그레벨 [ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log error;
pid /var/run/nginx.pid;
user
NGINX 프로세스가 실행되는 권한, root 권한은 보안상 위험함
worker_priority
worker 프로세스의 우선순위 설정
값이 작을 수록 높은 우선순위를 갖습니다.
커널 프로세스의 기본 우선순위인 -5 이하로는 설정하지 않도록 해야 합니다.
work_processes
nginx의 실행 가능한 worker 프로세스의 수를 지정해 줄 수 있습니다.
nginx는 master와 worker프로세스로 구성되어지는데요.
공식문서에 의하면, 최적 값은 cpu core에서부터 하드 드라이브 등 여러 가지 요소에 의해서 결정되어지는데요.
auto로 설정하면 자동으로 이 값을 찾아준다고 합니다.
error_log
에러 로그 파일의 위치와 로그 레벨을 지정합니다.
pid
nginx의 마스터 프로세스 id정보가 저장됩니다.
http 블록
http {
include mime.types;
default_type application/octet-stream;
upstream back-server {
server 127.0.0.1:3000;
keepalive 32;
}
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
server_tokens off;
keepalive_timeout 65;
charset utf-8;
server {
...
}
}
include
다른 파일의 설정을 가져올 수 있습니다.
default_type
http의 기본 타입을 설정할 수 있습니다.
upstream
upstream 서버 설정
인자로 upstream서버의 이름을 넣어주면 됩니다.
서버들은 TCP이든 UNIX 도메인 소켓이든 모두 listen 할 수 있습니다.
위의 예시에서는 back-server라는 이름으로, 내부의 3000 포트 서버로 연결시켜 주도록 하였습니다.
keepalive를 하는 이유는 proxy서버로부터, 다시 로컬의 서버로 연결될 때,
접속이 다시 생성됨으로 인한 비효율을 막기 위해서 입니다.
log_format, access_log
로그 포멧을 통해 어떠한 정보를 로그에 남길 것인지 설정을 할 수 있습니다.
access_log 설정을 통해서 어느 위치에 로그를 남길 건지, 어떠한 레벨로 남길지 설정합니다.
위의 예시에서는 log_format을 통해 정의한 내용을 access_log에 적용하였습니다.
server_tokens
헤더에 nginx버전을 숨기는 기능을 합니다.
보안상 off로 설정을 권장합니다.
keepalive_timeout
접속 시 유지 시간을 지정합니다.
charset
charset을 설정하는 값, 한글을 지원하기 위해서는 utf-8을 사용해야 한다.
gzip 설정
// TODO
map을 이용한 allowed_referer
// TODO
아래 남은 3가지 블록은 다음 포스팅을 통해서 정리하도록 하겠습니다.