NGINX의 기본 값으로도 웹서버를 운영하는데 큰 문제는 없지만, 환경설정을 변경함으로서 성능과 보안을 강화할 수 있다. 이번 수업에서는 nginx에서 권장되는 기본 설정 값을 알아보자.
nginx.conf
user
user의 값이 root로 되어 있다면 일반 계정으로 변경하자. nginx는 마스터 프로세스와 워커 프로세스로 동작하고, 워커 프로스세가 실질적인 웹서버의 역할을 수행하는데 user 지시어는 워커 프로세스의 권한을 지정한다. 만약 user의 값이 root로 되어 있다면 워커 프로세스를 root의 권한으로 동작하게되고, 워커 프로세스를 악의적 사용자가 제어하게 된다면 해당 머신을 루트 사용자의 권한으로 원격제어하게 되는 셈이기 때문에 보안상 위험하다.
이 설정의 값으로는 www-data, www, nginx와 같이 계정이 하는 일에 대한 대표성이 있는 이름을 사용하면 되고, 이 계정은 일반 유저의 권한으로 쉘에 접속 할 수 없어야 안전하다. 아래와 같은 방법으로 사용자를 생성할 수 있다. 예를들어 지시자의 값이
user www-data www-data라면 아래와 같이 사용자를 생성할 수 있다.
useradd --shell /sbin/nologin www-data
우분투에서는 아래와 같은 방법으로 사용자를 생성한다.
useradd --shell /usr/sbin/nologin www-data
이렇게 하면 www-data의 권한으로는 쉘에 접근 할 수 없게된다. www-data는 오직 nginx를 구동하는데만 사용할 수 있게 되는 것이다.
worker_process
worker_process는 워커 프로세스를 몇개 생성할 것인지를 지정하는 지시어다. 이 값이 1이라면 모든 요청을 하나의 프로세스로 실행하겠다는 의미인데, 여러개의 CPU 코어가 여러개 있는 시스템에서 이 값이 1이면 하나의 코어만으로 요청을 처리하게 되는 셈이다. 따라서 여러개의 코어가 있는 시스템이라면 이 값은 코어의 숫자만큼 지정하는 것이 바람직하다.
worker_connections
이 값은 이벤트 안에서 사용하는 지시어로 몇개의 접속을 동시에 처리할 것인가를 지정하는 값이다. 이 값과 worker_process의 값의 조합을 계산해서 하나의 머신이 처리 할 수 있는 커넥션의 양을 산출할 수 있다. 예를들어 worker_process의 값이 4이고, worker_connections의 값이 1024라면 4 X 1024 = 4096개의 커넥션을 맺을 수 있다. 이 값을 설정하는 공식은 없고, 여러가지 자료를 참고하고, 직접 퍼포먼스를 테스트하면서 값이 조정해야 한다. 퍼포먼스 테스트를 위한 방법은 퍼포먼스 테스트 수업과 ngrinder 수업을 참고하자.
log_not_found
이 값은 존재하지 않는 파일에 대한 요청이 있을 때 404에러를 에러로그 파일에 기록할 것인지 여부를 의미한다. 이 값을 off로 하면 존재하지 않는 파일에 대한 에러로그 기록을 생략할 수 있다.
client_max_body_size
이 값은 업로드 할 수 있는 용량의 크기를 지정한다. 이 지시자의 기본값은 1MB인데, 더 많은 파일의 업로드를 허용하려면 이 값을 늘려줘야 한다. 아래의 설정은 10MB까지 업로드를 허용한다.
client_max_body_size 10M;