Nginx配置解析整理

定义Nginx运行的用户和用户组

user www www;
进程数
建议设置为等于CPU总核心数 。
worker_processes 8;
全局错误日志
全局错误日志定义类型 , [ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log info;
进程文件
pid /var/run/nginx.pid;
打开的最多文件描述符
一个nginx进程打开的最多文件描述符数目 , 理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除 , 但是nginx分配请求并不均匀 , 所以建议与ulimit -n的值保持一致 。
worker_rlimit_nofile 65535;
event
单个进程最大连接数
并发总数是 worker_processes 和 worker_connections 的乘积
即 max_clients = worker_processes * worker_connections
在设置了反向代理的情况下 , max_clients = worker_processes * worker_connections / 4 为什么 为什么上面反向代理要除以4 , 应该说是一个经验值根据以上条件 , 正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000worker_connections 值的设置跟物理内存大小有关
因为并发受IO约束 , max_clients的值须小于系统可以打开的最大文件数
工作模式与连接数上限
events {
参考事件模型 , use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是linux 2.6以上版本内核中的高性能网络I/O模型 , 如果跑在FreeBSD上面 , 就用kqueue模型 。
use epoll;
单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 65535;
}
查看可以打开的文件句柄数是多少
cat /proc/sys/fs/file-max
并发连接总数小于系统可以打开的文件句柄总数 , 这样就在操作系统可以承受的范围之内
所以 , worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置,使得并发总数小于操作系统可以打开的最大文件数目 , 其实质也就是根据主机的物理CPU和内存进行配置
查看系统限制 ulimit -a
打开文件句柄数量限制
是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的SOCKET数量 , 可影响MySQL的并发连接数目)
系统总限制: /proc/sys/fs/file-max
当前使用句柄数:/proc/sys/fs/file-nr
修改句柄数:ulimit -SHn 65535
http
include mime.types; #文件扩展名与文件类型映射表
default_type Application/octet-stream; #默认文件类型
charset utf-8; #默认编码
client_header_buffer_size 32k; #上传文件大小限制
sendfile
sendfile on; 开启高效文件传输模式
sendfile指令指定nginx是否调用sendfile函数来输出文件 , 对于普通应用设为 on , 如果用来进行下载等应用磁盘IO重负载应用 , 可设置为off , 以平衡磁盘与网络I/O处理速度 , 降低系统的负载 。注意:如果图片显示不正常把这个改成off 。
sendfile()还能够用来在两个文件夹之间移动数据
tcp_nopush 在linux/Unix系统中优化tcp数据传输 , 仅在sendfile开启时有效
autoindex on;#开启目录列表访问 , 合适下载服务器 , 默认关闭 。
keepalive_timeout 120;#长连接超时时间 , 单位是秒
gzip
gzip on; 开启gzip压缩输出
gzip_min_length 1k; 设置允许压缩的页面最小字节数
页面字节数从header头得content-length中进行获取 。默认值是0 , 不管页面多大都压缩 。建议设置成大于2k的字节数 , 小于2k可能会越压越大 。
gzip_buffers 4 16k; 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流 。
例如 4 4k 代表以4k为单位 , 按照原始数据大小以4k为单位的4倍申请内存 。4 8k 代表以8k为单位 , 按照原始数据大小以8k为单位的4倍申请内存 。如果没有设置 , 默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果 。
gzip_http_version 1.0;压缩版本(默认1.1 , 前端如果是squid2.5请使用1.0)
gzip_comp_level 2; 压缩级别 , 1-10 , 数字越大压缩的越好 , 也越占用CPU时间


推荐阅读