Nginx 전쟁 준비 - 최적화 지침

Nginx 전쟁 준비 - 최적화 지침
저자: Zachary Orr
대부분의 Nginx 에 관 한 안내 서 는 가장 기본 적 인 부분 만 알려 줍 니 다. apt - get 가방 은 여기 와 저기 줄 을 수정 한 후에 웹 서버 를 얻 었 습 니 다!대부분의 경우 흔히 볼 수 있 는 nginx 설치 도 당신 의 사이트 에 좋 은 서 비 스 를 제공 할 수 있 습 니 다.그러나 nginx 의 성능 을 더 압착 하려 면 더 멀리 가 야 한다.이 매 뉴 얼 에서 저 는 nginx 의 어떤 설정 을 조정 하면 더 좋 은 성능 을 얻 을 수 있 는 지 설명 하고 대량의 클 라 이언 트 요청 에 대응 할 것 입 니 다.동시에 이것 은 완전한 조정 지침 이 아니 라 는 것 을 주의해 야 한다.다만 성능 을 개선 하기 위해 조정 할 수 있 는 설정 에 대한 간단 한 개술 일 뿐이다.반드시 구체 적 인 상황 을 구체 적 으로 대해 주 십시오.
기본 설정
다음 에 수정 할 유일한 파일 은 nginx. conf 입 니 다. nginx 서로 다른 모듈 의 모든 설정 을 저장 합 니 다.서버 의 / etc / nginx 디 렉 터 리 에서 nginx. conf 를 찾 을 수 있 습 니 다.먼저 전체적인 설정 을 검토 한 다음 에 설정 에 있 는 모든 모듈 을 살 펴 보고 커 다란 클 라 이언 트 연결 수 에 어떤 설정 이 더 좋 은 성능 을 가 져 올 수 있 는 지, 그리고 왜 성능 을 향상 시 킬 수 있 는 지 토론 합 니 다.완전한 프로필 은 글 의 끝 에서 찾 을 수 있 습 니 다.
최상 위 설정
nginx. conf 파일 에는 모듈 이외 의 최상 위 설정 이 있 습 니 다.
user www-data;
pid /var/run/nginx.pid;    
worker_processes auto;    
worker_rlimit_nofile 8192;

user 와 pid 는 기본 값 을 사용 해 야 합 니 다. 우리 의 목적 에 아무런 영향 이 없 기 때문에 우 리 는 이 부분 을 수정 하지 않 습 니 다.
worker_processes 는 nginx 가 웹 사이트 에 서 비 스 를 제공 할 때 worker 프로 세 스 의 수 를 정의 합 니 다.최적화 값 은 CPU 커 널 수, 데 이 터 를 저장 하 는 디스크 수, 부하 값 을 포함 한 여러 요소 의 영향 을 받는다.확실 하지 않 으 면 사용 가능 한 CPU 커 널 의 수 를 설정 하 는 것 이 좋 은 시작 입 니 다. ("auto" 로 설정 하면 사용 가능 한 값 을 자동 으로 감지 하려 고 합 니 다.)
worker_rlimit_nofile 은 워 커 프로 세 스 가 파일 을 여 는 최대 값 제한 을 수정 하 였 습 니 다.설정 하지 않 으 면 운영 체제 가 제한 합 니 다.운영 체제 와 nginx 가 'ulimit - n' 을 초과 한 파일 을 처리 할 때 보고 가 발생 하기 때문에 이 수 치 를 크게 조정 하면 nginx 는 'too many open files' 의 문제 가 발생 하지 않 습 니 다.
# bump up our hard limitsudo 
sh -c ulimit -HSn 100000

이 설정 이 영구적 으로 유효 하도록 시스템 설정 파일 을 수정 해 야 합 니 다.아래 줄 추가
> sudo nano /etc/security/limits.conf
* soft nofile 200000
* hard nofile 200000

이벤트 모듈
이벤트 모듈 은 nginx 에서 링크 를 처리 하 는 모든 설정 을 포함 합 니 다.
events {    
    worker_connections 2048;    
    multi_accept on;    
    use epoll;    
}

worker_connections 는 워 커 프로 세 스 가 동시에 열 수 있 는 링크 수 를 설정 합 니 다.워 커 조정 되 었 기 때문에rlimit_nofile, 그래서 이 수 치 를 안전하게 조정 할 수 있 습 니 다.
multi_accept 는 nginx 에 게 새 링크 의 요청 을 받 았 을 때 가능 한 한 링크 를 받 아들 이 라 고 알려 줍 니 다.
use 는 여러 클 라 이언 트 에 어떤 풀 화 방법 을 사용 하 는 지 설정 하 였 습 니 다.Linux 2.6 + 를 사용 하면 epoll 로 설정 해 야 합 니 다.* BSD 를 사용 하면 kqueue 로 설정 해 야 합 니 다.이벤트 풀 에 대해 더 알 고 싶다 고요?Wikipedia 를 당신 의 가이드 로 삼 으 세 요.
(주의해 야 할 것 은 nginx 가 어떤 풀 화 방법 을 사용 하 는 지 지정 하지 않 으 면 운영 체제 에 따라 가장 적합 한 것 을 선택 할 것 입 니 다.
HTTP 모듈
HTTP 모듈 은 nginx 의 http 처리 의 핵심 기능 을 제어 합 니 다. 설정 항목 이 매우 적 지만 간단하게 알 아 보 겠 습 니 다. 설정 한 세 션 은 http 모듈 에 두 어야 합 니 다. 그 다음 에는 특별히 설명 하지 않 습 니 다.
http {
    sendfile on;    
    tcp_nopush on;    
    tcp_nodelay on;    
    ...    
}

sendfile 은 sendfile () 을 활성화 시 켰 습 니 다. sendfile () 은 디스크 와 TCP 포트 (또는 임의의 두 파일 설명자) 사이 에서 데 이 터 를 복사 합 니 다. sendfile 이 나타 나 기 전에 이러한 데 이 터 를 전송 하기 위해 서 는 사용자 공간 에 데이터 캐 시 를 할당 해 야 합 니 다. read () 를 사용 하여 원본 파일 에서 데 이 터 를 캐 시 로 읽 은 다음 write () 를 사용 하여 캐 시 를 네트워크 에 기록 합 니 다. sendfile ()디스크 에서 데 이 터 를 직접 읽 고 운영 체제 버퍼 로 이동 합 니 다. 이 작업 은 커 널 에서 이 루어 졌 기 때문에 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 를 낮 출 수 있 고 속 도 를 올 릴 수 있 습 니 다.
error log 는 nginx 에 게 임계 오 류 를 기록 해 야 한다 고 알려 줍 니 다.
keepalive_timeout 20;
client_header_timeout 20;    
client_body_timeout 20;    
reset_timedout_connection on;    
send_timeout 20;

keepalive timeout 은 클 라 이언 트 와 의 kep - alive 링크 의 시간 초과 시간 을 지정 합 니 다. 서버 는 이 시간 후에 링크 를 닫 습 니 다. 이 값 을 낮 추어 워 커 가 너무 오래 바 쁘 지 않도록 합 니 다.
client header timeout 과 client body timeout (각각) 은 요청 헤더 와 요청 체 의 시간 초과 시간 을 설정 합 니 다. 이 값 도 낮 게 설정 해 야 합 니 다.
reset timedout connection 은 nginx 에 게 클 라 이언 트 가 해당 되 지 않 을 때 링크 를 닫 으 라 고 알려 줍 니 다. 이 클 라 이언 트 에 분 배 된 모든 메모 리 를 방출 합 니 다.
send timeout 은 응답 클 라 이언 트 의 시간 초과 시간 을 지정 합 니 다. 이 시간 은 전체 전송 시간 을 가리 키 는 것 이 아니 라 클 라 이언 트 가 두 번 읽 기 동작 사이 의 간격 입 니 다. 클 라 이언 트 가 이 시간 안에 데 이 터 를 다시 읽 을 준비 가 되 어 있 지 않 으 면 nginx 는 링크 를 닫 습 니 다.
limit_conn_zone $binary_remote_addr zone=addr:5m;
limit_conn addr 100;

limit conn zone 은 키 에 따라 데 이 터 를 저장 할 수 있 는 공유 메모리 영역 (예 를 들 어 현재 링크 수) 의 인 자 를 설정 합 니 다. 5m 는 5 메가바이트 로 32 바이트 상태 나 (16k * 5) 64 바이트 상 태 를 충분히 저장 해 야 합 니 다.
limit conn 은 지정 한 키 의 최대 연결 수 를 설정 합 니 다. 이 키 는 addr 이 고 값 은 100 이 므 로 IP 100 개 당 동시 연결 만 허용 합 니 다.
include /etc/nginx/mime.types;
default_type text/html;    
charset UTF-8;

include 는 현재 파일 에 다른 파일 의 내용 을 직접 포함 합 니 다. MIME 목록 을 불 러 옵 니 다.
default type 은 파일 의 기본 MIME 형식 을 설정 합 니 다.
charset 는 머리 에 포 함 된 기본 문자 집합 을 설정 합 니 다.
다음 두 가지 성능 개선 옵션 은 웹 마스터 스 StackExchange 의 이 위대 한 문제 에 대해 설명 합 니 다.
gzip on;
# gzip_static on;    
gzip_proxied any;    
gzip_min_length 256;    
gzip_comp_level 4;    
gzip_typestext/plain text/css 
application/json application/x-javascript text/xml 
application/xml application/xml+rss text/javascript;

gzip 는 nginx gzip 에 보 낼 데 이 터 를 압축 하 라 고 알려 줍 니 다. 보 낼 데이터 의 수 를 줄 일 수 있 습 니 다.
gzip static 은 nginx 에 게 내용 을 gzip 하기 전에 같은 이름 의 gzip 이 있 는 내용 을 찾 으 라 고 알려 줍 니 다. 미리 파일 을 압축 해 야 합 니 다. (이 예 에서 설명 되 었 습 니 다) 그러나 가장 높 은 압축 비 를 사용 할 수 있 습 니 다. 동시에 nginx 는 이 파일 들 을 압축 하지 않 습 니 다. (여기 서 gzip static 에 대한 정 보 를 더 알 수 있 습 니 다.)
gzip proxied 는 요청 / 응답 에 기반 한 압축 을 허용 하거나 금지 합 니 다. any 로 설정 하면 gzip 모든 요청 을 할 수 있 습 니 다.
gzip min length 는 gzip 데이터 의 최소 바이트 수 를 설정 합 니 다. gzip 압축 은 처리 요청 의 속 도 를 낮 출 수 있 기 때문에 요청 이 1000 바이트 보다 적 으 면 압축 하지 않 습 니 다.
gzip comp level 은 데이터 압축 의 레벨 을 설정 합 니 다. 레벨 은 1 - 9 의 임의의 값 일 수 있 습 니 다. 9 는 가장 느 리 지만 가장 높 은 비율의 압축 을 표시 합 니 다. 4 로 설정 하 는 것 은 좋 은 절충 선택 입 니 다.
gzip types 는 gzip 형식 을 설정 합 니 다. 위 에 있 는 것 은 있 지만 더 추가 할 수 있 습 니 다.
 # 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 는 open file cache 의 정 보 를 검사 하 는 효과 적 인 시간 간격 을 지정 합 니 다.
open file cache min uses 는 open file cache 에서 지정 한 시간 간격 으로 유 휴 파일 의 최소 사용 횟수 를 정의 합 니 다.
open file cache errors 는 파일 을 찾 을 때 캐 시 오류 여 부 를 지정 합 니 다.
include 는 설정 에 파일 을 다시 추 가 했 습 니 다. 서로 다른 파일 에 정 의 된 서비스 모듈 을 도 입 했 습 니 다. 서비스 모듈 이 이 경로 에 없 으 면 이 몇 줄 을 올 바른 경로 로 수정 해 야 합 니 다.
전체 프로필:
user www-data;pid /var/run/nginx.pid;    
worker_processes auto;    
worker_rlimit_nofile 8192;    
events {    
    worker_connections 2048;    
    multi_accept on;    
    use epoll;    
}    
http {    
    sendfile on;    
    tcp_nopush on;    
    tcp_nodelay on;    
    access_log off;    
    error_log /var/log/nginx/error.log crit;    
    keepalive_timeout 20;    
    client_header_timeout 20;    
    client_body_timeout 20;    
    reset_timedout_connection on;    
    send_timeout 20;    
    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_proxied any;    
    gzip_min_length 256;    
    gzip_comp_level 4;    
    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/*;    
}

본문http://mikespook.com/2013/11/%E7%BF%BB%E8%AF%91-nginx-%E5%A4%87%E6%88%98-%E4%BC%98%E5%8C%96%E6%8C%87%E5%8D%97/

좋은 웹페이지 즐겨찾기