Nginx 웹 서버의 성능 조정 및 최적화 방법

소개

Nginx는 전 세계에서 가장 바쁜 웹 사이트의 40 % 이상을 실행하는 매우 빠르고 강력하며 가벼운 고성능 웹 서버입니다. Nginx의 다양성으로 인해로드 밸런서, 리버스 프록시 및 HTTP 캐시 서버도 사용됩니다..


Nginx의 가장 큰 특징은 수천 개의 동시 연결을 쉽게 처리 할 수있는 속도입니다..

이 기사에서는 Nginx 웹 서버를 조정하고 최적화하는 가장 좋은 방법을 설명합니다..

전제 조건

  • Linux VPS 설정 (모든 Linux 맛)
  • Nginx 구성에 대한 기본 이해
  • 설치된 Nginx

Nginx 조정 및 최적화에는 기본 Nginx 구성 파일 /etc/nginx/nginx.conf의 매개 변수 조정이 포함됩니다..

다음은 샘플 기본 Nginx 구성 파일입니다. /etc/nginx/nginx.conf

사용자 www-data;
worker_processes 자동;
pid /run/nginx.pid;
/etc/nginx/modules-enabled/*.conf를 포함하십시오;

이벤트 {
워커 _ 연결 (768);
# multi_accept on;
}

http {

##
# 기본 설정
##

sendfile on;
tcp_nopush 켜짐;
tcp_nodelay 켜짐;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens 해제;
add_header X-XSS- 보호 "1; mode = 차단";
add_header X- 프레임 옵션 "SAMEORIGIN";

# server_names_hash_bucket_size 64;
# server_name_in_redirect 오프;

/etc/nginx/mime.types를 포함하십시오;
default_type 응용 프로그램 / 옥텟 스트림;

##
# SSL 설정
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # SSLv3 삭제, 참조 : POODLE
ssl_prefer_server_ciphers on;

##
# 로깅 설정
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
# Gzip 설정
##

에 gzip;

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text / plain text / css application / json application / javascript text / xml application / xml application / xml + rss text / javascript;

##
# 가상 호스트 구성
##

/etc/nginx/conf.d/*.conf를 포함하십시오;
/ etc / nginx / sites-enabled / * 포함;
}

#mail {
# # 다음의 샘플 인증 스크립트를 참조하십시오.
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost / auth.php;
# # pop3_capabilities "상단" "사용자";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# 서버 {
# 로컬 호스트 듣기 : 110;
# 프로토콜 pop3;
프록시 사용;
#}
#
# 서버 {
# localhost를 들어라 : 143;
# 프로토콜 imap;
프록시 사용;
#}
#}

nginx 조정 및 최적화를 수행하는 동안 편집하기 전에 현재 nginx 구성 파일을 백업하십시오. 한 번에 하나씩 변경하고 구성 파일을 저장하고 Nginx 서버를 다시 시작한 다음 성능 테스트를 수행하여 성능이 향상되었는지 확인하는 것이 좋습니다. 개선이 보이지 않으면 기본 / 초기 값으로 되돌릴 수 있습니다.

1. 노동자 과정

작업자 프로세스는 Nginx가 생성하는 작업자 수를 나타냅니다. CPU 코어 당 1 개의 작업자 프로세스를 실행하는 것이 가장 좋습니다. 시스템 / VPS에 CPU 코어 수보다 많은 값을 배치하면 시스템에서 유휴 프로세스가 발생합니다..

기본적으로 작업자 프로세스 값은 자동.

시스템의 CPU 코어 수를 알려면 다음 명령을 실행하십시오.

$ grep 프로세서 / proc / cpuinfo | 화장실 -l
1

VPS에는 1 개의 코어가 있으므로 작업자 프로세스 값을 1로 설정하는 것이 좋습니다.

구성 파일에서 아래와 같이 :

worker_processes 1;

nginx 웹 서버에 더 많은 트래픽이 축적되어 더 많은 프로세스를 실행해야하는 경우, 머신을 더 많은 코어로 업그레이드하고 작업자 프로세스를 시스템의 새로운 CPU 코어 수로 다시 조정하는 것이 좋습니다..

2. 작업자 연결

작업자 연결은 Nginx 웹 서버에서 동시에 서비스 할 수있는 클라이언트 수입니다. 작업자 프로세스와 결합하면 다음과 같이 초당 서비스를 제공 할 수있는 최대 클라이언트 수를 얻게됩니다.

최대 클라이언트 / 초 수 = 작업자 프로세스 * 작업자 연결

기본적으로 작업자 연결 값은 768로 설정됩니다.

그러나 대부분의 경우 브라우저는 서버 당 최소 2 개의 연결을 동시에 열므로 숫자를 반으로 줄일 수 있습니다..

Nginx의 잠재력을 극대화하려면 작업자 연결을 한 번에 코어에서 실행할 수있는 최대 프로세스 수로 설정해야합니다. 이 명령으로 얻을 수있는 열린 파일 설명자 수와 같습니다.

$ ulimit -n
1024

VPS에서 핵심은 한 번에 1024 개의 프로세스로 제한되므로 다음과 같이 (이벤트 섹션 내) 작업자 연결의 값을 1024로 설정하는 것이 좋습니다.

이벤트 {
worker_connections 1024;

}

우리의 계산에서 초당 제공 될 수있는 최대 클라이언트 수는

1024 명의 작업자 연결 * 1 개의 작업자 프로세스 = 초당 1024 개의 클라이언트

3. 멀티 수락

다중 수락은 작업자 프로세스가 새 연결을 수락하는 방법을 정의합니다.

기본적으로 작업자 프로세스는 꺼짐으로 설정되어 있으며 한 번에 하나의 새 연결 만 허용합니다..

착용하면 작업자 프로세스에서 모든 새 연결을 한 번에 수락합니다. multi_accept 값 (이벤트 섹션 내)은 아래와 같이 off로 설정해야합니다.

이벤트 {
worker_connections 1024;
multi_accept off;
}

4. Gzip 압축

클라이언트 응답을 압축하면 크기가 줄어들어 네트워크 대역폭이 줄어들고 연결 속도가 느린 페이지로드 시간이 향상됩니다. 압축 프로세스 자체는 기계 자원을 소비하므로 압축의 비용 이점을 분석하고 평가해야합니다. 그렇지 않으면 압축이 불리하게 작용하여 nginx 성능이 저하 될 수 있습니다. 다음과 같이 압축을 구현하는 것이 좋습니다.

  1. CSS, 텍스트, JavaScript 파일 (예 : c)과 같은 적절한 콘텐츠에 대해서만 gzip 콘텐츠를 사용하도록 설정
  2. 다양한 컨텐츠 유형 및 크기에 대해 압축을 활성화 및 비활성화하여 압축의 효과를 조사하십시오.
  3. 적절한 처리량 증가없이 CPU 노력으로 인해 압축 수준을 높이 지 마십시오..

권장되는 gzip 구성 샘플은 다음과 같습니다. (이내에 http 섹션)

에 gzip;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 1;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text / plain text / css application / json application / javascript text / xml application / xml application / xml + rss text / javascript;

5. 버퍼

버퍼는 nginx 성능 최적화에 큰 역할을합니다. 최적의 성능을 위해 조정해야하는 변수는 다음과 같습니다.

client_body_buffer_size – 클라이언트 버퍼 크기를 처리합니다 (예 : POST 작업). 양식 제출은 Nginx 웹 서버로 전송됩니다. 이것을 10K로 설정하는 것이 좋습니다.

client_header_buffer_size – 비슷한 client_body_buffer_size는 있지만 클라이언트 헤더 크기를 처리합니다. 이것을 1K로 설정하는 것이 좋습니다..

client_max_body_size – 허용되는 최대 클라이언트 요청 크기. 값이 초과되면 nginx에서 413 오류 또는 요청 엔티티가 너무 큼.

large_client_header_buffers – 큰 클라이언트 헤더의 최대 버퍼 수 및 크기.

권장 설정은 다음과 같습니다 (이내에 http 섹션)

client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 4 4k;

위의 값을 사용하면 nginx가 최적으로 작동하지만 추가 최적화를 위해 값을 조정하고 성능을 테스트 할 수 있습니다.

6. 타임 아웃

타임 아웃은 실제로 nginx 성능을 크게 향상시킵니다. keepalive 연결은 연결을 열고 닫는 데 필요한 CPU 및 네트워크 오버 헤드를 줄입니다. 최상의 성능을 위해 조정해야하는 변수는 다음과 같습니다.
client_header_timeout & client_body_timeout – 요청 후 nginx 서버가 클라이언트 헤더 또는 본문이 전송되기를 기다리는 시간.

keepalive_timeout – keepalive 연결이 열린 상태로 유지 된 후 nginx가 클라이언트 연결을 닫는 기간.

send_timeout – 클라이언트에 응답을 보내기위한 시간 초과. 이 기간 내에 클라이언트가 서버의 응답을받지 못하면 nginx가 연결을 종료합니다.

권장되는 값은 다음과 같습니다 (http 섹션 내).

client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;

7. 액세스 로그

로깅은 시스템 관리, 문제 해결 및 감사에 매우 중요합니다. 그러나 많은 양의 데이터를 로깅하고 저장하면 많은 양의 시스템 리소스가 소비되고 더 많은 CPU / IO주기를 사용하므로 서버 성능이 저하됩니다. 액세스 로깅을 위해 모든 단일 nginx 요청을 기록하므로 많은 CPU 리소스를 소비하므로 nginx 성능이 저하됩니다..

이것에 대해 두 가지 해결책이 있습니다..

  1. 액세스 로깅을 완전히 비활성화
    access_log off;
  2. 액세스 로깅이 필수 인 경우 액세스 로그 버퍼링을 활성화하십시오. 이를 통해 Nginx는 일련의 로그 항목을 버퍼링하여 각 단일 로그 항목에 대해 다른 쓰기 작업을 수행하는 대신 한 번에 로그 파일에 기록 할 수 있습니다..
    access_log /var/log/nginx/access.log main buffer = 16k

ELK 스택 및 시스템의 모든 로그를 중앙 집중화하는 다른 소스와 같은 로깅에 오픈 소스 솔루션을 사용할 수도 있습니다..

결론

최적화 된 nginx 웹 서버가 있으면 다음 단계는 서버에 대한 트래픽이 발생하거나 다른 요인이 발생할 때 서버를 모니터링하고 시간에 따라 설정을 조정하는 것입니다. 따라서 권장 값은 모든 상황에 가장 적합하지는 않지만 개발 중이나 웹 서버에 대한 트래픽이 적거나 중간 정도 인 트래픽에만 적합합니다. 성능 테스트를 수행하면서 개선 사항을 확인하면서 단계별 값을 늘릴 수 있습니다.

개선이 보이지 않으면 기본값을 그대로 두십시오. 다양한 매개 변수의 조정 된 값이 nginx 성능을 크게 향상시킵니다..

특히 트래픽이 쌓일 때 웹 서버 성능을 향상시키기 위해 고려해야 할 다른 사항으로는로드 밸런싱, 자동 확장, 고 가용성 등이 있습니다. 다른 모든 방법으로 문제가 해결되지 않으면 더 나은 최신 하드웨어 및 소프트웨어를 갖춘 새로운 VPS 제공 업체로 전환하십시오 (도움이 필요하십니까? HostAdvice의 최고 VPS 호스팅 서비스 목록 참조).

다음 3 가지 VPS 서비스를 확인하십시오.

A2 호스팅

시작 가격 :
$ 5.00


신뢰할 수 있음
9.3


가격
9.0


사용자 친화적
9.3


지원하다
9.3


풍모
9.3

리뷰 읽기

A2 호스팅 방문

스칼라 호스팅

시작 가격 :
$ 12.00


신뢰할 수 있음
9.4


가격
9.5


사용자 친화적
9.5


지원하다
9.5


풍모
9.4

리뷰 읽기

ScalaHosting 방문

주인공

시작 가격 :
$ 3.95


신뢰할 수 있음
9.3


가격
9.3


사용자 친화적
9.4


지원하다
9.4


풍모
9.2

리뷰 읽기

Hostinger 방문

관련 사용법 기사

  • Nginx로 WordPress를 설치하는 방법 & 레디 스
    초보자
  • Nginx로 WordPress를 설치하는 방법 & CentOS VPS 또는 전용 서버의 Redis
    중급
  • Ubuntu 18.04 VPS 또는 전용 서버에서 Nginx 웹 서버를 강화하는 방법
    전문가
  • CentOS 7 VPS 또는 전용 서버에 LEMP (Linux, Nginx, MySQL, PHP) 스택을 설치하는 방법
    중급
  • 동일한 Ubuntu VPS 또는 전용 서버에서 Nginx와 Apache를 함께 구성하는 방법
    중급
Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me