공유: Nginx 설정 성능 최적화

Nginx 설정 성능 최적화
분류: Nginx/Apache2014-04-03 22:23 3957 명 읽 기 댓 글 (0) 수장 하 다 고발 하 다.
nginxgzipworkerweb 서비스 epoll
대부분의 Nginx 설치 안내 서 는 apt - get 설 치 를 통 해 이곳 이나 그곳 의 몇 줄 설정 을 수정 합 니 다. 자, 웹 서버 가 있 습 니 다.그리고 대부분의 경우, 일반적인 설치 nginx 는 당신 의 사이트 에 있어 서 이미 잘 작 동 할 수 있 습 니 다.그러나 만약 당신 이 정말로 Nginx 의 성능 을 압출 하고 싶다 면, 당신 은 좀 더 깊이 들 어가 야 합 니 다.이 안내서 에서 나 는 Nginx 의 설정 을 미세 조정 하여 대량의 클 라 이언 트 를 처리 할 때의 성능 을 최적화 할 수 있 도록 설명 할 것 이다.주의해 야 할 것 은 이것 은 전면적 인 미조정 지침 이 아니다.이것 은 성능 설정 을 미세 조정 으로 향상 시 킬 수 있 는 간단 한 미리 보기 입 니 다.당신 의 상황 은 다 를 수 있 습 니 다.
기본 설정
우리 가 수정 할 유일한 파일 은 nginx. conf 입 니 다. 그 중에서 Nginx 의 서로 다른 모듈 의 모든 설정 을 포함 합 니 다.서버 의 / etc / nginx 디 렉 터 리 에서 nginx. conf 를 찾 을 수 있 을 것 입 니 다.우선, 우 리 는 전체 설정 에 대해 이야기 한 다음 에 파일 에 있 는 모듈 에 따라 어떤 설정 이 대량의 클 라 이언 트 가 방문 할 때 좋 은 성능 을 가 질 수 있 는 지, 왜 그들 이 성능 을 향상 시 킬 수 있 는 지 에 대해 이야기 할 것 이다.이 글 의 끝 에 완전한 프로필 이 있 습 니 다.
고 층 배치
nginx. conf 파일 에서 Nginx 에는 모듈 부분 위 에 몇 개의 고급 설정 이 있 습 니 다.
user www-data; pid /var/run/nginx.pid; worker_processes auto; worker_rlimit_nofile 100000;

user 와 pid 는 기본 설정 에 따라 야 합 니 다. - 변경 여부 가 다 르 지 않 기 때문에 변경 하지 않 습 니 다.
worker_processes nginx 가 대외 적 으로 웹 서 비 스 를 제공 할 때의 worker 프로 세 스 수 를 정의 합 니 다.가장 좋 은 값 은 CPU 핵의 수량, 데 이 터 를 저장 하 는 하드디스크 의 수량 과 부하 모드 를 포함 하 는 여러 가지 요소 에 달 려 있다.확실 하지 않 을 때 사용 가능 한 CPU 커 널 수로 설정 하 는 것 이 좋 은 시작 입 니 다. ("auto" 로 설정 하면 자동 으로 감지 하려 고 시도 합 니 다.)
worker_rlimit_nofile 워 커 프로 세 스 의 최대 열 림 파일 수 제한 을 변경 합 니 다.설정 하지 않 았 다 면 이 값 은 운영 체제 의 제한 입 니 다.설정 후 운영 체제 와 Nginx 는 "ulimit - a" 보다 더 많은 파일 을 처리 할 수 있 기 때문에 이 값 을 높 게 설정 하면 nginx 는 "too many open files" 문제 가 없 을 것 입 니 다.
이벤트 모듈
이벤트 모듈 에는 nginx 의 모든 처리 연결 설정 이 포함 되 어 있 습 니 다.
events { worker_connections 2048; multi_accept on; use epoll; }

worker_connections 워 커 프로 세 스 가 동시에 열 수 있 는 최대 연결 수 를 설정 합 니 다.위 에서 언급 한 worker 를 설정 하면rlimit_nofile, 우 리 는 이 값 을 매우 높 게 설정 할 수 있 습 니 다.
최대 클 라 이언 트 수도 시스템 의 사용 가능 한 socket 연결 수 에 의 해 제한 되 기 때문에 실제 와 맞지 않 는 높이 를 설정 하 는 것 은 좋 을 것 이 없다 는 것 을 기억 하 세 요.
multi_accept nginx 에 게 새로운 연결 알림 을 받 은 후 가능 한 한 많은 연결 을 받 도록 알려 줍 니 다.
use 클 라 이언 트 스 레 드 를 재 활용 하 는 폴 링 방법 을 설정 합 니 다.리 눅 스 2.6 + 를 사용한다 면 epoll 을 사용 해 야 합 니 다.만약 당신 이 * BSD 를 사용한다 면, 당신 은 kqueue 를 사용 해 야 합 니 다.
(주의해 야 할 것 은 Nginx 가 어떤 폴 링 방법 을 사용 해 야 할 지 모른다 면 운영 체제 에 가장 적합 한 것 을 선택 할 것 입 니 다)
HTTP 모듈
HTTP 모듈 은 nginx http 처리 의 모든 핵심 기능 을 제어 합 니 다.여 기 는 아주 적은 설정 만 있 기 때문에 우 리 는 설정 의 일부분 만 선택 합 니 다.이 모든 설정 은 http 모듈 에 있어 야 합 니 다. 심지어 이 설정 에 특별히 주의 하지 않 을 것 입 니 다.
http { server_tokens off; sendfile on; tcp_nopush on; tcp_nodelay on; ... }

server_tokens  nginx 가 더 빨리 실행 되 지 는 않 지만 오류 페이지 에 있 는 nginx 버 전 숫자 를 닫 을 수 있어 안전성 에 좋 습 니 다.
sendfile sendfile () 이 역할 을 발휘 할 수 있 습 니 다.sendfile () 은 디스크 와 TCP socket 사이 에서 서로 데 이 터 를 복사 할 수 있 습 니 다 (또는 임의의 두 파일 설명자).Pre - sendfile 은 데 이 터 를 전송 하기 전에 사용자 공간 에서 데이터 버퍼 를 신청 합 니 다.그 다음 에 read () 로 데 이 터 를 파일 에서 이 버퍼 로 복사 하고 write () 는 버퍼 데 이 터 를 네트워크 에 기록 합 니 다.sendfile () 은 디스크 에서 OS 캐 시 로 데 이 터 를 즉시 읽 습 니 다.이 복사 본 은 커 널 에서 이 루어 졌 기 때문에 sendfile () 은 조합 read () 와 write (), 닫 기 버퍼 를 여 는 것 보다 더 효과 적 입 니 다 (sendfile 에 관 한 것 이 더 많 습 니 다).
tcp_nopush nginx 에 게 하나의 패 킷 에서 모든 헤더 파일 을 보 내 고 하나씩 보 내지 않 는 다 고 알려 줍 니 다.
tcp_nodelay nginx 에 게 데 이 터 를 캐 시 하지 말고 한 단락 한 단락 의 전송 을 알려 줍 니 다. 데 이 터 를 제때에 보 내야 할 때 이 속성 을 설정 해 야 합 니 다. 이렇게 하면 작은 데이터 정 보 를 보 낼 때 바로 반환 값 을 받 을 수 없습니다.
access_log off; error_log /var/log/nginx/error.log crit;

access_log nginx 가 접근 로 그 를 저장 할 지 설정 합 니 다.이 옵션 을 사용 하면 디스크 IO 읽 기 동작 을 더 빨리 할 수 있 습 니 다 (aka, YOLO)
error_log nginx 에 심각 한 오류 만 기록 할 수 있 음 을 알려 줍 니 다:
keepalive_timeout 10; client_header_timeout 10; client_body_timeout 10; reset_timedout_connection on; send_timeout 10;

keepalive_timeout  클 라 이언 트 에 keep - alive 링크 시간 초과 할당.서버 는 이 시간 초과 후에 링크 를 닫 을 것 입 니 다.우 리 는 그것 을 좀 낮 게 설정 해서 ngnix 가 더 오래 일 할 수 있 도록 합 니 다.
client_header_timeout 와 clientbody_timeout 요청 헤더 와 요청 체 (각자) 의 시간 초과 설정.우리 도 이것 을 좀 낮 출 수 있다.
reset_timeout_connection nginx 에 응답 하지 않 는 클 라 이언 트 연결 을 닫 으 라 고 알려 줍 니 다.이것 은 클 라 이언 트 가 차지 하 는 메모리 공간 을 방출 할 것 이다.
send_timeout 클 라 이언 트 의 응답 시간 초과 지정.이 설정 은 전체 전송 기 에 사용 되 지 않 고 두 번 의 클 라 이언 트 읽 기 동작 사이 에 있 습 니 다.이 기간 동안 클 라 이언 트 가 데 이 터 를 읽 지 않 으 면 nginx 는 연결 을 닫 습 니 다.
limit_conn_zone $binary_remote_addr zone=addr:5m; limit_conn addr 100;

limit_conn_zone 각종 key (예 를 들 어 현재 연결 수) 를 저장 할 공유 메모리 의 인 자 를 설정 합 니 다.5m 는 5 메가바이트 입 니 다. 이 값 은 저장 (32K * 5) 32byte 상태 나 (16K * 5) 64byte 상태 로 충분히 설정 되 어야 합 니 다.
limit_conn 주어진 키 에 최대 연결 수 를 설정 합 니 다.여기 키 는 addr 입 니 다. 저희 가 설정 한 값 은 100 입 니 다. 즉, 모든 IP 주소 가 최대 100 개의 연결 을 동시에 열 수 있 도록 합 니 다.
include /etc/nginx/mime.types; default_type text/html; charset UTF-8;

include 현재 파일 에 다른 파일 내용 을 포함 하 는 명령 일 뿐 입 니 다.잠시 후에 사용 할 MIME 형식 을 불 러 오 는 데 사용 합 니 다.
default_type 파일 에 사용 할 기본 MIME - type 을 설정 합 니 다.
charset 헤더 파일 의 기본 문자 집합 을 설정 합 니 다.
gzip on; gzip_disable "msie6"; # gzip_static on; gzip_proxied any; gzip_min_length 1000; gzip_comp_level 4; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

gzip nginx 에 게 gzip 압축 형식 으로 데 이 터 를 보 내 는 것 을 알려 줍 니 다.이것 은 우리 가 보 낸 데이터 의 양 을 줄 일 것 이다.
gzip_disable 지정 한 클 라 이언 트 를 위해 gzip 기능 을 사용 하지 않 습 니 다.우 리 는 우리 의 방안 을 광범 위 하 게 호 환 할 수 있 도록 IE6 또는 더 낮은 버 전 으로 설정 했다.
gzip_static nginx 에 게 자원 을 압축 하기 전에 미리 gzip 에서 처리 한 자원 이 있 는 지 찾 아 보 세 요.이것 은 파일 을 미리 압축 해 야 합 니 다. (이 예 에서 주석 이 떨 어 졌 습 니 다) 최고 압축 비 를 사용 할 수 있 도록 해 줍 니 다. 그러면 nginx 는 이 파일 들 을 더 이상 압축 하지 않 아 도 됩 니 다. (더 자세 한 gzip static 정 보 를 원 하 시 면 여 기 를 클릭 하 십시오.)
gzip_proxied 요청 과 응답 에 기반 한 응답 흐름 을 허용 하거나 압축 하지 않 습 니 다.모든 요청 을 압축 하 는 것 을 의미 하 는 any 로 설정 합 니 다.
gzip_min_length 데이터 에 압축 을 사용 할 최소 바이트 수 를 설정 합 니 다.만약 요청 이 1000 바이트 보다 작다 면, 우 리 는 그것 을 압축 하지 않 는 것 이 좋 습 니 다. 왜냐하면 이 작은 데 이 터 를 압축 하면 이 요청 을 처리 하 는 모든 프로 세 스 의 속 도 를 낮 출 수 있 기 때 문 입 니 다.
gzip_comp_level 데이터 의 압축 등급 을 설정 합 니 다.이 등급 은 1 - 9 사이 의 임 의 수치 일 수 있 으 며, 9 는 가장 느 리 지만 압축 비 는 가장 크다.우 리 는 4 로 설정 했다. 이것 은 비교적 절충 적 인 설정 이다.
gzip_type 압축 할 데이터 형식 을 설정 합 니 다.위의 예 에는 이미 몇 가지 가 있 으 니, 너 도 더 많은 형식 을 추가 할 수 있다.
# cache informations about file descriptors, frequently accessed files # can boost performance, but you need to test those values open_file_cache max=100000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; ## # Virtual Host Configs # aka our settings for specific servers ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;

open_file_cache 캐 시 를 여 는 동시에 캐 시 최대 수량 과 캐 시 시간 도 지정 합 니 다.우 리 는 20 초 이상 활동 하지 않 은 후에 제거 할 수 있 도록 상대 적 으로 높 은 시간 을 설정 할 수 있다.
open_file_cache_valid openfile_cache 에서 정확 한 정 보 를 감지 하 는 간격 을 지정 합 니 다.
open_file_cache_min_uses open 정의file_cache 에서 명령 파라미터 가 활동 하지 않 는 시간 동안 가장 작은 파일 수 입 니 다.
open_file_cache_errors 파일 을 검색 할 때 오류 정 보 를 캐 시 할 지 여 부 를 지정 하 였 으 며, 설정 에 파일 을 다시 추가 하 는 것 도 포함 되 어 있 습 니 다.저희 도 서버 모듈 을 포함 하고 있 습 니 다. 이것 은 서로 다른 파일 에서 정 의 된 것 입 니 다.서버 모듈 이 이 위치 에 없다 면 이 줄 을 수정 해서 정확 한 위 치 를 지정 해 야 합 니 다.
완전한 설정
user www-data; pid /var/run/nginx.pid; worker_processes auto; worker_rlimit_nofile 100000; events { worker_connections 2048; multi_accept on; use epoll; } http { server_tokens off; sendfile on; tcp_nopush on; tcp_nodelay on; access_log off; error_log /var/log/nginx/error.log crit; keepalive_timeout 10; client_header_timeout 10; client_body_timeout 10; reset_timedout_connection on; send_timeout 10; limit_conn_zone $binary_remote_addr zone=addr:5m; limit_conn addr 100; include /etc/nginx/mime.types; default_type text/html; charset UTF-8; gzip on; gzip_disable "msie6"; gzip_proxied any; gzip_min_length 1000; gzip_comp_level 6; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; open_file_cache max=100000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }

설정 을 편집 한 후 nginx 를 다시 시작 하 는 것 을 확인 하 십시오.
sudo service nginx restart

좋은 웹페이지 즐겨찾기