影响Nginx高性能的7大配置(nginx 高性能原理)
7大部分:workers、磁盘I/O、网络活动、Buffers、压缩、缓存、超时
Workers 部分
通过配置Workers,能够有效的处理来自客户端的连接
- worker_processes 设置Nginx中worker的数量;设置为auto时,表示允许Nginx确定可用的内核数量、磁盘、服务器负载等资源。
- worker_connections 控制worker可以同时打开的连接数;默认512个。
- worker_rlimit_nofile 与上一个参数相关,为了能够处理"大并发连接",这个值通常要设置大一些。
- multi_accept 允许worker一次接受"等待处理的数据对象"队列中的多个连接。
- mutex_accept 默认关闭;由于我们配置了 "允许worker一次接受多个连接" 就要打开此参数。
- mutex_accept_delay 指定worker在接受新连接之前,等待多少时间。一旦启用了"mutex_accept",就会在指定时间内为worker分配一个互斥锁,时间结束后,worker就可以接收新的连接。
- use 指定客户端的连接方式,epoll是目前linux平台上最高效的方法。
- epoll_events 指定Nginx将事件传输到内核的数量
磁盘I/O部分
配置异步的I/O,使Nginx能够有效执行数据并提高缓存效率
- sendfile 要利用操作系统的资源,必须打开该参数;此指令用于小文件的优化。
- aio 对于读写操作,启用多线程(异步I/O)。
- directio 允许将读写直接发送到应用程序,从而提高缓存效率;用于大文件的优化,如视频。
- directio_alignment 为数据传输分配块大小值
网络部分
通常当数据包"分片"传输时,它们往往会使高负载的网络饱和,我们将使用2个参数来防止小数据包在发送前等待大约200ms的时间
- tcp_nopush 开启此参数后,将会合并多个小数据包一次性发送。
- tcp_nodelay 默认关闭;开启后允许发送数据时不再等待200ms。
Buffers 缓冲区部分
- client_body_buffer_size 设置请求缓冲区的大小,32位操作系统设置8k,64位操作系统应设置16k。
- client_max_body_size 如果要处理大型文件上传,至少设置2M以上;默认1M。
- client_body_in_single_buffer 不是所有请求都存储在缓冲区内,部分会保存在临时文件中;开启此参数,整个请求缓冲区都会保存在单个缓冲区中。
- client_header_buffer_size 为请求头设置缓冲区。
- large_client_header_buffers 设置读取大请求头的数量和大小。
压缩部分
压缩数据也是保证web服务器高性能的一种方式
- gzip 开启压缩;默认关闭。
- gzip_comp_level 压缩级别,范围1-9。级别越高,越吃CPU性能。
- gzip_min_length 最小压缩长度,建议设置20字节以上
- gzip_types 要压缩的类型,默认值为"text/html"
- gzip_http_version 最低支持的http版本;默认1.1
- gzip_vary 压缩时,添加Vary:Accept字段到响应中
- gzip_disable 某些浏览器不支持gzip;通过User-Agent来禁用某些浏览器的压缩功能
Cache缓存部分
利用缓存,可以减少多次加载相同数据的次数;以下内容可以放在http,server,location区段中。
- open_file_cache 默认禁用;打开后缓存请求文件和目录的元数据
- open_file_cache_valid 设置缓存的有效期
- open_file_cache_min_uses 缓存的最小访问次数,在有效期内不满足最小访问次数,则会清空缓存信息
- open_file_cache_errors 缓存错误信息,如"权限被拒绝","无法访问此文件"等,当用户因没有权限访问某个资源时,Nginx会显示相同的错误信息。
Timeout 超时部分
用于防止长时间等待连接而造成的资源浪费
- keepalive_timeout 设置保持连接30秒;默认为75秒。
- keepalive_requests 保持活动连接的数量。
- send_timeout 向客户端发送数据的超时时间