목차
설정 파일 위치
├── conf.d ├── fastcgi.conf ├── fastcgi_params ├── koi-utf ├── koi-win ├── mime.types ├── nginx.conf ├── proxy_params ├── scgi_params ├── sites-available │ └── default ├── sites-enabled │ └── default -> /etc/nginx/sites-available/default ├── snippets │ ├── fastcgi-php.conf │ └── snakeoil.conf ├── uwsgi_params └── win-utf
우분투에서 APT 패키지 관리자를 통해 NGINX를 설치했다면 /etc/nginx
디렉토리에 위와 같은 구조의 설정 관련 파일과 디렉토리를 볼수 있습니다. 만일 컴파일로 설치했다면 컴파일시 기본 설정 디렉토리인 /usr/local/nginx
에 위치하게 될것 이구요.
# find / -name nginx.conf
만일 우분투가 아니거나 설정 디렉토리를 잘 못찾겠다면 관리자 권한을 얻은 상태에서 위와 같은 명령어로 nginx 디렉토리 하위에 위치한 nginx.conf
파일이 설정 파일입니다.
NGINX 기본 동작 이외에도 파일 확장자의 MIME Type, 가상 호스트, 리버스 프록시나 FastCGI로 PHP를 연결해 구동하기 위한 설정 파일들이 이 디렉토리에 포함되어 있습니다. 만일 NGINX-Full 패키지를 설치했다면 다이나믹 모듈로 설정하기 위한modules-available
modules-enabled
디렉토리도 생성되어 있을 것입니다.
이 포스트에서 NGINX에서 가장 기본적으로 설정되는 항목에 대해 하나씩 알아보겠습니다.
nginx.conf 설정
user www-data; worker_processes auto; pid /run/nginx.pid;
nginx.conf 파일은 접속자수, 동작 프로세스수등 퍼포먼스에 기본적인 설정 항목을 담고 있습니다. 파일 맨 위쪽에는 위와 같은 설정이 있는데 각 항목을 간단하게 설명하면 user는 NGINX 프로세스가 실행되는 권한을, worker_processes는 NGINX 프로세스 실행 가능 수를, pid는 NGINX의 마스터 프로세스 ID 정보가 저장됩니다.
아파치나 NGINX 같은 웹서버 서비스 같은 경우 권한이 없는 nobody나 www-data 권한으로 실행하는 것은 보안과 관련이 있어 해당 권한이 탈취 당하더라도 ssh를 비롯한 접속 및 파일 엑세스가 불가능하기 때문에 위처럼 설정하게 됩니다.
worker_processes 같은 경우에는 auto로 설정해도 무방하지만 명시적으로 서버에 장착되어 있는 코어 수 만큼 할당하는 것이 보통이며 코어 수보다 더 높게도 할당할 수 있습니다.
events { worker_connections 768; multi_accept on; #기본값:off use epoll; }
NGINX는 비동기 이벤트 방식의 처리 방식을 가지고 있는데 events block은 그 처리에 관련된 옵션을 설정하는 곳입니다.
worker_processes X worker_connections = 최대 접속자 수
worker_connections 는 하나의 프로세스가 처리할 수 있는 커넥션의 수로 최대 연결 수는 위와 같습니다. 그밖에 동시 접속 처리를 위한 worker 프로세스 사용과 커넥션 핸들링 옵션을 지정합니다.
http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 10; #기본값:75 types_hash_max_size 2048; server_tokens off; server_names_hash_bucket_size 64; #기본값:32 server_names_hash_max_size 2048; #기본값:512 # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; access_log off; log_not_found off; error_log /var/log/nginx/error.log warn; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
http block은 웹서버에 대한 동작 설정입니다. keepalive_timeout 옵션은 접속시 커넥션을 몇초 동안 유지할 것인지 설정하게 되는데 이 값이 높으면 불필요한 커넥션을 유지하기 때문에 낮은 값 또는 0으로 설정하는 것이 좋습니다.
server_tokens 같은 경우 헤더에 NGINX의 버전을 숨기는 역할을 하므로 보안상 설정하는 것이 좋습니다.
server_names_hash_bucket_size와server_names_hash_max_size는 호스트의 도메인 이름에 대한 공간을 설정하는 것으로 이 값이 낮을 경우 많은 가상 호스트 도메인을 등록한다거나, 도메인 이름이 길 경우에 bucket 공간이 모자라 에러가 생길 수 있으므로 넉넉하게 설정합니다.
웹서버를 운영하면서 접속자의 IP와 리퍼러 정보등을 수집하는 것이 운영 및 보안을 위해 중요하지만 http block에서 엑세스 로그를 설정하면 하나의 파일에 모든 접속 로그가 남게되어 관리가 불편하기 때문에 각 가상 호스트마다 로그를 배분하는 것이 관리가 편리하므로 http block 에서는 off로 처리합니다. 또한 에러 같은 경우에도 중요한 오류 이외에는 로그로 남기지 않게 설정해서 최대한 로그로 인해 디스크 엑세스를 하지 않게 설정합니다.
NGINX는 가상 호스트 설정이나 반복되는 옵션 항목을 include를 통해 불러올 수 있습니다.
예를 들어 리버스 프록시를 각 도메인에 설정한다고 했을 때 헤더 처리 옵션등을 일일히 붙여 넣고 수정한다면 효율성이 떨어지기 때문에 include 를 활용하는 것이 좋습니다. 기본적으로 conf.d
디렉토리에 설정을 .conf 로 저장해서 nginx.conf 설정 파일을 깔끔하게 유지할 수 있습니다.
가상 호스트 설정 파일의 경우 기본적으로 sites-available
디렉토리 아래에 위치하고 있으며sites-enabled
디렉토리에 심볼릭 링크를 걸어줌으로써 NGINX에서 사용하게 설정하게 됩니다.