Nginx 常用指令说明

1. main 全局配置
Nginx在运行时与具体业务功能(比如http服务或者email服务代理)无关的一些参数 , 比如工作进程数 , 运行的身份等 。

  • woker_processes 2
  • 在配置文件的顶级main部分 , worker角色的工作进程的个数 , master进程是接收并分配请求给worker处理 。这个数值简单一点可以设置为cpu的核数grep ^processor /proc/cpuinfo | wc -l , 也是 auto 值 , 如果开启了ssl和gzip更应该设置成与逻辑CPU数量一样甚至为2倍 , 可以减少I/O操作 。如果nginx服务器还有其它服务 , 可以考虑适当减少 。
  • worker_cpu_affinity
  • 也是写在main部分 。在高并发情况下 , 通过设置cpu粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗 。如worker_cpu_affinity 0001 0010 0100 1000; (四核) 。
  • worker_connections 2048
  • 写在events部分 。每一个worker进程能并发处理(发起)的最大连接数(包含与客户端或后端被代理服务器间等所有连接数) 。nginx作为反向代理服务器 , 计算公式 最大连接数 = worker_processes * worker_connections/4 , 所以这里客户端最大连接数是1024 , 这个可以增到到8192都没关系 , 看情况而定 , 但不能超过后面的worker_rlimit_nofile 。当nginx作为http服务器时 , 计算公式里面是除以2 。
  • worker_rlimit_nofile 10240
  • 写在main部分 。默认是没有设置 , 可以限制为操作系统最大的限制65535 。
  • use epoll
  • 写在events部分 。在linux操作系统下 , nginx默认使用epoll事件模型 , 得益于此 , nginx在Linux操作系统下效率相当高 。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件模型kqueue 。在操作系统不支持这些高效模型时才使用select 。
2. http服务器
与提供http服务相关的一些配置参数 。例如:是否使用keepalive啊 , 是否使用gzip进行压缩等 。
  • sendfile on
  • 开启高效文件传输模式 , sendfile指令指定nginx是否调用sendfile函数来输出文件 , 减少用户空间到内核空间的上下文切换 。对于普通应用设为 on , 如果用来进行下载等应用磁盘IO重负载应用 , 可设置为off , 以平衡磁盘与网络I/O处理速度 , 降低系统的负载 。
  • keepalive_timeout 65 : 长连接超时时间 , 单位是秒 , 这个参数很敏感 , 涉及浏览器的种类、后端服务器的超时设置、操作系统的设置 , 可以另外起一片文章了 。长连接请求大量小文件的时候 , 可以减少重建连接的开销 , 但假如有大文件上传 , 65s内没上传完成会导致失败 。如果设置时间过长 , 用户又多 , 长时间保持连接会占用大量资源 。
  • send_timeout : 用于指定响应客户端的超时时间 。这个超时仅限于两个连接活动之间的时间 , 如果超过这个时间 , 客户端没有任何活动 , Nginx将会关闭连接 。
  • client_max_body_size 10m
  • 允许客户端请求的最大单文件字节数 。如果有上传较大文件 , 请设置它的限制值
  • client_body_buffer_size 128k
  • 缓冲区代理缓冲用户端请求的最大字节数
模块http_proxy:
这个模块实现的是nginx作为反向代理服务器的功能 , 包括缓存功能(另见文章)