>  기사  >  백엔드 개발  >  Nginx 코어 구성에 대한 심층적인 이해

Nginx 코어 구성에 대한 심층적인 이해

WBOY
WBOY원래의
2016-07-28 08:27:13950검색

원본 링크: http://blog.csdn.net/xyang81/article/details/51814787

Nginx 구성은 모듈 단위로 구성되어 있으며, 지침은 다음과 같습니다. 구성 파일의 가장 작은 구성 단위이며 모든 구성 항목은 지침입니다. 예를 들어 http 코어 모듈의 include, default_type 및 sendfile 명령은 모두 http 모듈에 속합니다. 모든 nginx 모듈에 대한 지침은 공식 문서를 참조하세요: http://nginx.org/en/docs/dirindex.html

<code>注意:以下配置中的“上下文”表示指令可以配置在哪些模块中。
main:顶层配置,约束服务器的行为
</code>

1. 서버 수준 코어 구성

指令 上下文 语法 默认值 功能描述
user main user nobody nobyd; nobody 以哪个用户权限运行工作线程
daemon main daemon yes; yes nginx是否以守护进程运行
worker_processes main worker_processes number; 1 配置工作进程数。传统的web服务器(如apache)都是同步阻塞模型,一请求一进(线)程模式,当进(线)程数增达到一定程度后,更多CPU时间浪费在线程和进程切换当中,性能急剧下降,所以负载率不高。Nginx是基于事件的非阻塞多路复用(epoll或kquene)模型,一个进程在短时间内就可以响应大量的请求。建议将该值设置<=cpu核心数量,一般高于cpu核心数量不会带来好处,反而可能会有进程切换开销的负面影响。
worker_connections events worker_connections number; 1024 并发响应能力的关键配置值,表示每个进程允许的最大同时连接数。maxConnection = work_connections * worker_processes;一般一个浏览器会同时开两条连接,如果是反向代理,nginx到后服务器的连接数量也要占用2条连接数,所以,做静态服务器,一般maxConnection = work_connections * worker_processes / 2; 做反代理服务器时maxConnection = work_connections * worker_processes / 4;
use events use epoll; 根据不同的平台,选择最高效的连接处理方法 指定处理连接请求的方法。linux内核2.6以上默认使用epoll方法,其它平台请参考:http://nginx.org/en/docs/events.html 备注:要达到超高负载下最好的网络响应能力,还有必要优化与网络相关的linux内核参数
worker_cpu_affinity main worker_cpu_affinity cpumask …; 将工作进程绑定到特定的CPU上,减少CPU在进程之间切换的开销。用二进制bit位表示进程绑定在哪个CPU内核。如8内核4进程时的设置方法:worker_cpu_affinity 00000001 00000010 00000100 10000000
worker_rlimit_nofile main worker_rlimit_core size; 受linux内核文件描述符数量限制 设置nginx最大能打开的文件描述符数量。因为Linux对每个进程所能打开的文件描述数量是有限制的,默认一般是1024个,可通过ulimit -n FILECNT或/etc/securit/limits.conf配置修改linux默认能打开的文件句柄数限制。建议值为:系统最大数量/进程数。但进程间工作量并不是平均分配的,所以可以设置在大一些。推荐值为:655350
error_log main, http, mail, stream, server, location error_log 日志文件路径 日志级别; error_log logs/error.log error; 配置错误日志文件的路径和日志级别。日志级别有debug, info, notice, warn, error, crit, alert和emerg几种。nginx的日志使用syslog输出,所以输出的日志格式是有规律的,系统运维人员可以根据日志规则进行查错或统计分析。更多说明请参考官方文档:http://nginx.org/en/docs/ngx_core_module.html#error_log
pid main pid 守护进程socket文件路径; pid logs/nginx.pid 配置nginx守护进程ID存储文件路径(不是工作进程)

위는 서버 수준 동작을 관리하는 nginx의 최상위 구성입니다. 자세한 구성은 공식 문서를 참조하세요: http://nginx.org/en/docs/ngx_core_module.html#working_directory

2. HTTP 모듈 코어 구성

nginx는 HTTP 역방향 프록시 서버의 경우 가장 일반적인 구성은 http 요청과 관련되어야 합니다. http 모듈과 관련된 모든 구성은 http { ... } 구성에 배치됩니다.

sendfilehttp, 서버, 위치, 위치에 있는 경우sendfile on | off;커널 복사 모드를 활성화합니다. 정적 서버가 되면 최대 IO 액세스 속도가 향상될 수 있습니다. 전통적인 파일 읽기 및 쓰기 프로세스는 다음과 같습니다. 하드 디스크>> 커널 버퍼>> 커널 소켓 버퍼>> hard disk >> 커널 버퍼(kernelsocket 버퍼에 빠르게 복사) >> 프로토콜 스택, sendfile 시스템 호출은 커널과 사용자 모드 사이의 스위치 및 데이터 복사 수를 줄이고 데이터를 직접 복사하는 것이 분명합니다. 커널 캐시에서 프로토콜까지 스택은 효율성을 크게 향상시킵니다. 이 글에서 좀 더 자세히 소개합니다: http://xiaorui.cc/?p=1673tcp_nodelayhttp, 서버, 위치 off |on;tcp_nopushhttp, 서버, 위치off|on; tcp_nodelay 이 두 매개변수는 tcp_nopush와 함께 사용됩니다. 이 두 구성이 활성화되면 데이터 패킷이 특정 크기에 도달한 후에 데이터가 전송됩니다. 이렇게 하면 네트워크 통신 횟수가 줄어들고 차단 가능성이 낮아지지만 응답의 적시성에도 영향을 미칩니다. 파일 다운로드와 같은 빅데이터 통신 시나리오에 더 적합합니다. keepalive_timeouthttp, 서버, 위치keepalive_time 65;클라이언트에서 클라이언트로 연결을 설정하는 시간 초과입니다. 서버, 초과 지정된 시간에 서버 연결이 끊어집니다. 기본값은 75초입니다. 각 연결의 생존 시간을 줄이면 응답 연결 수가 어느 정도 늘어날 수 있으므로 일반적으로 이 값은 적절하게 줄일 수 있습니다. gziphttp, server, 위치, 위치에 있는 경우gzip on | off;클라이언트의 액세스 트래픽과 네트워크 대역폭을 효과적으로 줄일 수 있는 콘텐츠 압축을 활성화합니다gzip_min_length http, 서버, 위치gzip_min_length length;단위는 k이고 기본값은 20k입니다. 콘텐츠가 최소 길이를 초과하는 경우에만 압축을 켜십시오. 콘텐츠가 너무 짧으면 압축이 제대로 이루어지지 않고 압축 과정에서 시스템 리소스도 낭비되기 때문입니다. 이 압축된 길이는 http 응답 헤더의 Content-Length 필드로 클라이언트에 반환됩니다. 권장 값: 1000gzip_comp_levelhttp, 서버, 위치gzip_comp_level 1~9;압축 수준, 기본값 1입니다. 범위는 1~9입니다. 압축 수준이 높을수록 압축률은 높아지지만 시스템 성능 요구 사항도 높아집니다. 권장 값: 4gzip_typeshttp, 서버, 위치gzip_types mime-type …;압축 콘텐츠 유형, 기본값은 text/html;입니다.html 텍스트만 압축됩니다. 일반적으로 js, css, json 등을 압축합니다. 이러한 공통 텍스트 데이터는 결합될 수 있습니다. 예: text/plain text/css application/json application/x-javascript text/xml application/xml application/xml rss text/javascript;
명령 컨텍스트 구문 함수 설명
types http, server, location types { mime type file suffix }; 처리할 수 있는 파일 형식을 구성합니다. 예: text/html html htm shtml;
include any include 파일 경로; include the content of 외부 파일 구성으로 nginx.conf 파일에 복사합니다. 예: include mime.type; 현재 디렉터리의 mime.type 구성 파일을 nginx 구성 파일에 복사합니다. 파일 경로는 상대 경로이거나 절대 경로일 수 있습니다. 파일 이름에는 *를 사용하여 와일드카드 문자를 나타낼 수 있습니다.
default_type http, 서버, 위치 default_type MIME 유형; 파일 이름과 접미사 간의 매핑 관계입니다. 기본 MIME 유형을 구성합니다. 요청한 파일 유형이 유형 지시문에 없으면 default_type에 지정된 유형이 사용됩니다. 기본값은 텍스트/일반 유형입니다.
access_log http, 서버, 위치, 위치에 있는 경우 제한_제외 access_log 경로 [형식 [버퍼=크기] [gzip[=레벨 ] ]] [flush=time] [if=condition]];
access_log off;
액세스 로그를 끄거나 활성화합니다. 기본 구성은 다음과 같습니다. access_loglogs/access.log 결합; 결합으로 정의된 로그 형식이 결합된 로그 형식이 http 모듈의 기본 형식임을 의미합니다. 버퍼 및 gzip 매개변수 중 하나가 정의되면 기본적으로 로그가 캐시에 기록됩니다. 캐시가 가득 차면 캐시의 로그가 gzip으로 압축되어 파일에 기록됩니다. nginx 모듈을 설치할 때 gzip이 추가되었는지 확인해야 합니다. 캐시 크기의 기본값은 64K입니다. gzip 압축 수준은 1부터 9까지 구성할 수 있습니다. 수준이 높을수록 압축 효율은 높아지고 로그 파일이 차지하는 공간은 작아지지만, 시스템 성능은 높아집니다. 기본값은 1입니다. http://nginx.org/en/docs/http/ngx_http_log_module.html#access_log
log_format http log_format 형식 이름 로그 형식 ; http 액세스 로그의 형식을 정의합니다. 로그 형식에서는 http 모듈에 포함된 변수에 액세스할 수 있으며, 해당 변수가 있으면 로그로 출력됩니다. 예: remotead dr, 요청 등 더 많은 변수는 http://nginx.org/en/docs/http/ngx_http_core_module.html#variables
open_file_cache http , server, location open_file_cache off; open_file_cache max=N [inactive=time]; 기본값은 off입니다. 최대 캐시 수와 캐시된 파일의 사용되지 않은 수명을 설정합니다. 권장 값: max=655350(worker_rlimit_nofile 매개변수와 일치) inactive=20s;
open_file_
cache_min_uses
http, 서버, 위치 open_file_cache_min_uses number; 기본값은 1이며, 유효 기간 동안 파일이 사용되는 최소 횟수입니다. 권장 값: 2
open_file
_cache_valid
http, 서버, 위치 open_file_cache_valid 시간; 기본값은 60초 , 캐시 유효성 간격을 확인하십시오. 60초마다 캐시된 파일을 확인한다는 의미입니다. 20초 내에 2회 이상 사용되지 않은 파일이 있으면 캐시에서 삭제됩니다. lru 알고리즘을 사용합니다.
server server { … } http HTTP 서버의 핵심 구성으로, 가상 호스트를 구성하는 데 사용됩니다. HTTP 서버의 여러
listen listen ip[:port] server IP를 구성할 수 있습니다. 가상 호스트 수신 주소 및 포트 기본적으로 로컬 IP 주소와 포트 80 또는 8000을 수신합니다. IP만 설정하고 포트를 설정하지 않은 경우 기본적으로 포트 80이 사용됩니다. 포트만 설정하고 IP는 설정하지 않은 경우에는 기본적으로 로컬 IP를 사용합니다. 자세한 구성은 http://nginx.org/en/docs/http/ngx_http_core_module.html#listen
server_name server_name domain_name …을 참조하세요. 서버 가상 호스트의 도메인 이름을 공백으로 구분하여 여러 개 지정할 수 있습니다. 기본값은 비어 있습니다
charset http, server, location, if in location charset charset | off; set request 인코딩은 잘못된 URL 매개변수 문제와 관련이 있습니다.
위치 서버, 위치 위치 [ = | ~ | ~* | ^~ ] uri { … }
위치 @name { … }
http 요청의 중요한 구성 항목으로, 서버를 요청하는 클라이언트의 URL 주소에 대한 일치 규칙을 구성하는 데 사용됩니다. 여러 일치 규칙을 구성할 수 있습니다
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

위에서는 Nginx 핵심 구성에 대한 심층적인 이해를 소개했으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP 정규 함수다음 기사:PHP 정규 함수