[置顶]NGINX配置各个参数详解(针对初学者和运维人员)

1 文档简介

本文根据服务器的实际运行硬件环境, 对 Nginx 的系统参数进行说明解释, 期望开发、

运维人员能够参考本文理解 Nginx 的参数真实涵义, 防止理解错误而出现配置错误错误。

2 基础环境

本文档中采用的操作系统环境为 ubuntu 14.04 LTS,选用的 nginx 版本为官方 1.9.2 版本。

3 参数说明

优化参数项一般可以按照自己服务器的负载情况来设置,如果服务器性能强劲,内存等

资源充足,各项参数可以适当调高,防止出现内核丢数据导致问题分析困难。

3.1 Nginx core 模块配置

3.1.1 worker_processes

工作进程数, 根据负载情况进行配置,通常可以配置为 CPU 核心数的 2 倍, 可以

使用 auto 值,让 nginx 自己决定。

建议值: auto

3.1.2 error_log

错误日志配置, [ debug | info | notice | warn | error | crit ]

建议值: notice

3.2 Nginx event 模块配置

3.2.1 worker_connections

工作进程最大连接数, 注意系统单进程最大连接数限制。 已经系统总句柄数限制。

建议值: 8192

3.2.2 use

使用的事件模型,各个平台下支持的事件模型不同, linux 下默认使用 epoll 模型。

建议值: 不配置

3.2.3 multi_accept

在 Nginx 获得有新连接的通知之后,接受尽可能多的连接,提升新连接的处理能力。

建议值: on

3.2.4 accept_mutex

各个工作进程接收新连接时使用的锁,由于 Nginx 是多进程共享 listen fd, 新连接

到来时, 多个工作进程的 epoll_wait 会被唤醒。 开启锁有助于各个工作进程的连接

均衡, 但是处理新连接的能力会变差。

建议值: off

3.3 Nginxhttp main 配置

3.3.1 client_body_buffer_size= 8k

默认客户端 body 缓冲区大小, 超过后会写入到 temporary file(临时文件),可以

根据各自的业务请求情况进行配置,尽量避免请求落到磁盘上。

建议值:默认

3.3.2 client_header_buffer_size = 1024

用于接收 http 头部的缓冲区,一般这个大小是足够的,如果超过,会启用


large_client_header_buffers。

建议值:默认

3.3.3 large_client_header_buffers = 4 8192

设置了用于接收较大客户端头部的缓冲区最大数与大小。当请求行超过一个缓冲区

大小后, 会返回 414 错误码,如果是某个头部超过,会报 400 错误码。

建议值:默认

3.3.4 client_header_timeout = 60s

读取客户端头部的超时时间, 如果超时会返回 408 错误码。

建议值:默认

3.3.5 client_body_timeout = 60s

读取客户端 body 部分的超时时间, 如果超时会返回 408 错误码。

建议值:默认

3.3.6 client_max_body_size = 1m

允许客户端最大的 body 长度, nginx 会通过检查 Content-Length 来判断, 如果超过

会返回 413 错误码。 将该值设置为 0,禁用该检查项。

建议值: 默认

3.3.7 ignore_invalid_headers= on

是否忽略非法头部的开关。 自定义头部要遵循 http 头部规范, 例如“X_Sub: ”否则

会被忽略掉。

建议值:默认

3.3.8 keepalive_requests = 100

设置 keep-alive 属性连接上请求的最大次数。一般 http1.1 长连接上需要注意,超

过 100 个请求,连接会自动关闭。

建议值: 10000

3.3.9 lingering_close = on(on |always |off)

控制如何关闭连接,详细参考 SO_LINGER。

建议值:默认

3.3.10 sendfile = off

是否使用 sendfile()。 能够减少文件数据从内核态到用户态间的多次拷贝,提升数

据发送效率。

建议值: on

3.3.11 tcp_nodelay = on

tcp_nodelay 开关, 开启可提高小块数据实时性。

建议值:默认

3.3.12 server_name “”

设置虚拟主机名, 支持多种形式,如下例:

server_name example.com www.example.com

server_name example.com *.example.com www.example.*

server_name .example.com;

server_name www.example.com ~^www\d+\.example\.com$

3.3.13 listen

虚拟 server 监听的端口,后可以配置端口的属性。例如:

listen 127.0.0.1:8000 backlog=512;

listen *:8000reuseport;

reuseport 是 nginx1.9.x 新增特性,需要高版本内核才能支持, 开启后,对短连接的

处理速度明显提升。

3.4 Nginxlog 模块配置

3.4.1 access_log off

访问日志开关以及路径等配置。 负载高的机器不建议开启 access_log。

建议值: 默认

3.4.2 log_format

acess log 记录的信息项,可根据需求提取相关字段。

建议值: 默认

3.5 Nginxupstream 模块配置

3.5.1 server

节点地址信息。 每个节点支持额外项配置,包括 weight、 max_fails、 fail_timeout、

backup、 down、 max_conns 等。 默认情况下, nginx 判断一个节点失败后会重试下

一个节点,直到 upstream 下的所有节点失效才报错。 如果不熟悉额外项,可以使

用默认。

3.5.2 ip_hash

一种 upstream 的负载均衡模式, 如果开启后,同一个 IP 地址的请求绝大多数情况

下是被转发到同一个后端服务。

3.5.3 keep_alive

upstream 与后端保持的长连接池, 当闲置的长连接超过这个值时,会被关闭,不

影响正在使用的连接数最大值。 需要确认后端 server 是否支持连接缓存。

建议: 默认

3.6 Nginx proxy 模块配置

3.6.1 proxy_buffer_size4k

默认分配的缓冲区用于接收后端响应。

建议值:默认

3.6.2 proxy_buffering on

是否需要 nginx 缓存 upstream 的响应,关闭后, nginx 收到后就直接发送给客户端。

开启后, 响应会缓存到 proxy_buffer_size 和 proxy_buffers 中, 超出部分会保持临时

文件, 应该配置尽量避免写文件。 也可以通过 X-Accel-Buffering 头部来控制。

建议值:默认

3.6.3 proxy_buffers 8 4k

用于接收后端响应的缓冲区大小。

建议值:默认

3.6.4 proxy_connect_timeout = 60s

连接后端服务器的超时时间,如果出现 IP 地址不可达(机器宕机), TCP 层收不到

RST,会导致这个很长。

建议值: 3s

3.6.5 proxy_http_version = 1.0

转发时使用的 http 协议版本。 可根据后端 server 对 http 的支持情况而定。

建议值:默认

3.6.6 proxy_ignore_client_abort off

是否忽略客户端的异常断开。如果为 off,客户端只要提前断开, nginx 就会立即关

闭与后端的连接。

建议值:默认

3.6.7 proxy_max_temp_file_size 1024M

开启 buffering 的情况下,如果后端响应过大, 保存到文件中的最大空间。

建议值:默认

3.6.8 proxy_read_timeout = 60s

从后端读取响应数据的超时时间。该时间是指响应数据时的间隔时间,并不是总时

间。 实时服务可以调低该值。

建议值: 15s

3.6.9 proxy_send_timeout = 60s

发送数据到后端的超时时间。 该时间指连续发送操作中, 2 次的间隔时间,并不是

总时间。建议调低该值。

建议值: 15s

proxy_set_header

用于转发时设置各种头部,例如:

proxy_set_header Host $ host;

3.7 其他 upstream 模块配置

原理与 proxy 模块类似,可以从官网查看对应配置

3.8 其他插件模块配置

ngx_http_proxy_module 模块中的缓存功能

proxy_temp_path: 定义从后端服务器接收的临时文件的存放路径,可以为临时文件路

径定义至多三层子目录的目录树。

proxy_cache_path: 设置缓存的路径和其他参数。缓存数据是保存在文件中的,缓存的

键和文件名都是在代理 URL 上执行 MD5 的结果。 levels 参数定义了缓存的层次结构。

配置示例:

proxy_temp_path /tmp/proxy_temp_dir;

proxy_cache_path /tmp/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m

inactive=1d max_size=30g;

keys_zone:定义 cache 区域的名字

200m:指内存缓存空间大小

30g:指硬盘缓存大小

inactive:定义缓存多长时间内没有被访问即进行删除

由于模块众多,在此不一一列举。

4 通用配置

官方通用配置模板:

#user nobody;

worker_processes 1;

#error_log logs/error.log;

error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

events {

worker_connections 1024;

}

http {

includemime.types;

default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '

# '$status $body_bytes_sent "$http_referer" '

# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

#gzip on;

server {

listen 80;

server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

root html;

index index.html index.htm;

}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80

#

#location ~ \.php$ {

# proxy_pass http://127.0.0.1;

#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

#location ~ \.php$ {

# root html;

# fastcgi_pass 127.0.0.1:9000;

# fastcgi_indexindex.php;

# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

# includefastcgi_params;

#}

# deny access to .htaccess files, if Apache's document root

# concurs with nginx's one

#

#location ~ /\.ht {

# deny all;

#}

}

# another virtual host using mix of IP-, name-, and port-based configuration

#

#server {

# listen 8000;

# listen somename:8080;

# server_namesomename alias another.alias;

# location / {

# root html;

# index index.html index.htm;

# }

#}

# HTTPS server

#

#server {

# listen 443 ssl;

# server_name localhost;

# ssl_certificatecert.pem;

# ssl_certificate_keycert.key;

# ssl_session_cache shared:SSL:1m;

# ssl_session_timeout 5m;

# ssl_ciphers HIGH:!aNULL:!MD5;

# ssl_prefer_server_ciphers on;

# location / {

# root html;

# index index.html index.htm;

# }

#}

}

本文由 8源码吧 作者:吧主 发表,其版权均为 8源码吧 所有,文章内容系作者个人观点,不代表 8源码吧 对观点赞同或支持。如需转载,请注明文章来源。

发表评论