前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx 参数配置相关

Nginx 参数配置相关

作者头像
授客
发布2019-09-11 15:24:39
6880
发布2019-09-11 15:24:39
举报
文章被收录于专栏:授客的专栏授客的专栏

目的:

对Nginx配置的点滴学习总结,主要目的在于分析Nginx与性能相关的一些参数设置,以便性能调优时选择最优配置

环境:

$ cd /usr/local/nginx/sbin/

$ ./nginx -v

nginx version: nginx/1.8.0

配置文件说明:

# cat /usr/local/nginx/conf/nginx.conf

# 使用的用户和组

#user nobody;

说明:

语法:user user [group];

默认值: user nobody nobody;

# 定义工作衍生进程(worker processe)数

worker_processes 1;

说明:

语法:worker_processes number | auto; number:指定进程数量,auto:自动调整为可获取的CPU核数

默认值:worker_processes 1;

worker_processes的最佳值依赖很多因素,包括(但不局限于)CPU核数,存储数据的硬盘驱动数量,负载模式。如果拿捏不定的话,设置为可获取的CPU核数或者auto。

1.3.8和1.2.5版本开始,才支持auto参数

参考连接:

http://nginx.org/en/docs/ngx_core_module.html#worker_processes

nginx有一个主进程和一些工作进程(Worker processes)。主进程主要用于读取和评估配置,维护工作进程。工作进程真正执行请求的处理。nginx采用基于事件的模型(event-based model)和依赖操作系统的机制有效的分发请求到不同的工作进程中。

参考连接:

http://nginx.org/en/docs/beginners_guide.html

# [ debug | info | notice | warn | error | crit ]

# 可以在下方直接使用 [ debug | info | notice | warn | error | crit ] 参数

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

说明:

语法:error_log file [level];

默认值:error_log logs/error.log error;

配置日志。如果没指定日志文件和日志级别,则使用默认文件和默认级别。

第一个参数:file - 定义存储日志的文件,建议存储路径:/var/log/nginx.error_log;stderr - 选择标准错误文件;可通过指定”syslog:”前缀配置日志记录到sysLog,指定“memory:” 前缀和buffer大小来配置日志记录到循环内存缓冲区,这个通常用于调试,比如 error_log memory:32m debug;

第二个参数: 定义日志级别,默认为error,可以是以下参数之一:

debug, info, notice, warn, error, crit, alert, 或emerg。所列日志级别按严重程度升序排序。指定某个日志级别后,级别在其之后(更严重级别)的日志也会被记录。比如指定了warn,那么error, crit, alert, emerg级别的日志都会被记录。

如果需要调试日志,编译nginx时需要携带 --with-debug选项编译,更多查看 A debugging log

参考连接:

http://nginx.org/en/docs/debugging_log.html#memory

http://nginx.org/en/docs/ngx_core_module.html#error_log

# 指定 pid 存放的路径,建议:pid /var/run/nginx.pid;

#pid logs/nginx.pid;

events {

# 设置可以被单个工作进程打开的最大并发连接数

worker_connections 1024;

}

设置可以被单个工作进程打开的最大并发连接数。需要注意的是,该设置包含了所有的连接(比如和代理服务的连接),不仅仅是同客户端的连接。另外,实际并发连接数不能超过当前可打开最大文件描述符数限制,可通过修改work rlimit nofile来修改当前可打开最大文件描述符数限制。如下:

worker_processes 1;

worker_rlimit_nofile 65535;

说明:

语法:worker_rlimit_nofile number;

修改工作进程可打开的文件描述符数。用于不重启main进程的情况下,增加可打开的文件描述符数。number的值不能大于操作系统的进程能打开的最大的文件句柄数

events 中还可以指定连接处理方式,如下

events {

worker_connections 1024;

# 指定连接处理方式,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] ;

use kqueue;

}

说明:

语法: use method;

注意,通常没必要显示指定连接的处理方式。Nginx会自动采用最有效率的连接方式。

语法: accept_mutex on | off;

默认值: accept_mutex off;

如果开启accept_mutex,worker进程将轮流接收新的连接。否则,所有进程都会收到新连接的通知,这样,如果果新连接数量很少的情况下,可能会导致一些工作进程浪费系统资源。

对于支持EPOLL除外标识的系统,或者使用reuseport(listen 后面携带reuseport选项),没必要开启accept_mutex。(There is no need to enable accept_mutex on systems that support the EPOLLEXCLUSIVE flag (1.11.3) or when using reuseport.

1.11.3版本之前,默认值为on

参考连接:

http://nginx.org/en/docs/ngx_core_module.html#worker_connections

http://nginx.org/en/docs/ngx_core_module.html#worker_rlimit_nofile

http://nginx.org/en/docs/events.html

http://nginx.org/en/docs/ngx_core_module.html#accept_mutex

http {

include mime.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"';

更多详情参考:http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format

# 设置访问日志,如果不必要的话,可以设置关闭 access_log off;让读取磁盘IO操作更快

#access_log logs/access.log main;

更多详情参考:http://nginx.org/en/docs/http/ngx_http_log_module.html#access_log

# 让sendfile()起作用,建议开启

sendfile on;

# 仅在 sendfile开启的情况下使用tcp_nopush

#tcp_nopush on;

更多详情参考:http://nginx.org/en/docs/http/ngx_http_core_module.html#tcp_nopush

# tcp_nodelay,send_lowat 在默认配置中是没有体现的

tcp_nodelay on;

语法:tcp_nodelay on | off;

默认值:tcp_nodelay on;

开启、禁用TCP_NODELAY选项。该选项仅在连接处于keep-alive状态下使用。

参考连接:http://nginx.org/en/docs/http/ngx_http_core_module.html#tcp_nodelay

send_lowat 12000;

说明:

语法: send_lowat size;

默认值: send_lowat 0;

如果size设置为非0值,nginx将通过使用kqueue的NOTE_LOWA标识或SO_SNDLOWAT选项尽量减少send操作次数

在Linux、Solaris、Windows上,该指令被忽略

参考连接:http://nginx.org/en/docs/http/ngx_http_core_module.html#send_lowat

#keepalive_timeout 0;

keepalive_timeout 65;

说明:

语法:keepalive_timeout timeout [header_timeout];

默认值:keepalive_timeout 75s;

第一个参数:设置keep-alive客户端连接在服务器端保持open状态时间,超过这个时间服务器将关闭连接。如果设置为0,那么禁用keep-alive客户端连接。

第二个参数:可选参数,在响应头头域设置一个响应头Keep-Alive: timeout=time,其中time等于header_timeout。IE浏览器会在大致60s后自动关闭keep-alive连接。

这里如果设置时间太长,连接长时间不关闭,而导致连接太多,占用过多资源,所以值得根据具体情况设置。

参考连接: http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout

# 可以考虑补充以下指令

reset_timeout_connection on;

语法:reset_timedout_connection on | off;

默认值:reset_timedout_connection off;

帮助避免已经关闭的socket长时间处于FIN_WAIT1状态并占用缓冲区(This helps avoid keeping an already closed socket with filled buffers in a FIN_WAIT1 state for a long time)。也就说开启后,可以避免不必要的资源占用。

参考连接:http://nginx.org/en/docs/http/ngx_http_core_module.html#reset_timedout_connection

语法: send_timeout time;

默认值:send_timeout 60s;

设置传输响应体到客户端的超时时间。这里的超时时间是指两次成功写操作之间的时间间隔。在这个时间范围内,客户端没接收到任何数据,那么连接被关闭。

参考连接:http://nginx.org/en/docs/http/ngx_http_core_module.html#send_timeout

#gzip on;

说明:

语法:gzip on | off;

开启、禁用压缩请求响应体(response),开启后可大大减少传输数据的大小,建议开启。可以配合其它gzip_xxxx设置使用。

gzip on;

gzip_min_length 1100;

gzip_buffers 4 8k;

gzip_types text/plain;

语法: gzip_min_length length;

默认:gzip_min_length 20;

设置仅响应头Content-Length的值超过gzip_min_length长度的响应体(response)才进行压缩。建议:如果请求小于1000字节,最好不要压缩它

参考连接:http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_min_length

语法:gzip_types mime-type ...;

默认值:gzip_types text/html;

指定除text/html之外的,需要压缩的响应体的MIME类型。如指定值 * 则匹配任意MIME类型(0.8.29)。携带text/html的响应体类型总是被压缩。

参考连接:http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_types

语法:gzip_buffers number size;

默认值:gzip_buffers 32 4k|16 8k;

设置用于压缩响应体的缓冲区数量和大小。默认的,buffer大小等于一个内存页大小,4K、8K, 取决于操作系统。

到0.7.28为止,默认的使用4个4k、8K

参考连接:http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_buffers

更多参数研究,查看官方文档:http://nginx.org/en/docs/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-02-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档