NGINX 기본 환경 설정 튜닝 및 설명

NGINX
튜토리얼 환경 : 우분투 데스크탑 16.04 LTS Xenial / NGINX 패키지 설치

설정 파일 위치

├── 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에서 사용하게 설정하게 됩니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Fill out this field
Fill out this field
유효한 이메일 주소를 입력해주세요.

nginx title 03
NGINX WebDAV 설정 방법
WebDAV(Web Distributed Authoring and Versioning)는 http를 이용해 웹서버에 저장되어 있는 파일을 여러 사용자가 편집하기 위해 고안된 프로토콜입니다. 실제로는 FTP 대용으로…
windows nginx php setting title
윈도우 NGINX PHP 연동 및 서비스 등록 방법
이전 포스트에서 윈도우에 NGINX를 설치하고 서비스에 등록하는 방법까지 알아봤는데요. NGINX를 개발 환경 또는 웹서버 환경으로 만들기 위해서 PHP를 설치해야 하는…