net.core.netdev_max_backlog=662144
web 应用中listen 函数的backlog 默认会给我们内核参数的net.core.somaxconn限制到128,而nginx 定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值net.core.somaxconn=662144
限制仅仅是为了防止简单的DoS 攻击net.ipv4.tcp_max_orphans=662144
未收到客户端确认信息的连接请求的最大值 可以容纳更多等待连接的网络连接数。net.ipv4.tcp_max_syn_backlog=662144
net.ipv4.tcp_timestamps=0
内核放弃建立连接之前发送SYNACK 包的数量net.ipv4.tcp_synack_retries=1
内核放弃建立连接之前发送SYN 包的数量net.ipv4.tcp_syn_retries=1
启用timewait 快速回收net.ipv4.tcp_tw_recycle=1
开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_mem=94500000 915000000 927000000
net.ipv4.tcp_fin_timeout=3
当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时net.ipv4.tcp_keepalive_time=30
允许系统打开的端口范围net.ipv4.ip_local_port_range=10000 65000
修改防火墙表大小,默认65536 net.netfilter.nf_conntrack_max=655350 net.netfilter.nf_conntrack_tcp_timeout_established=1200 确保无人能修改路由表net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0
sysctl -p 使配置生效
系统连接数的优化 查看当前系统允许打开的文件数(没修改的话就是1024) ulimit -n 编辑修改/etc/security/limits.conf 在末尾添加如下代码,soft noproc 65535
hard noproc 65535
soft nofile 65535
hard nofile 65535
修改系统运行打开的最大连接数
ulimit -SHn 65535
nginx.conf的优化配置
nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8)。
worker_processes 8;
这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文 件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。 现在在linux2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。
worker_rlimit_nofile 65535;
useepoll;
使用epoll 的I/O 模型
(
补充说明:
与apache相类,nginx针对不同的操作系统,有不同的事件模型
A)标准事件模型 Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll B)高效事件模型Kqueue:使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD2.0 和 MacOS X. 使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
Epoll: 使用于Linux内核2.6版本及以后的系统。
/dev/poll:使用于 Solaris 7 11/99+, HP/UX 11.22+(eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
Eventport:使用于 Solaris 10. 为了防止出现内核崩溃的问题,有必要安装安全补丁。)
每个进程允许的最多连接数, 理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。worker_connections 65535;
keepalive 超时时间。keepalive_timeout 60;
客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。client_header_buffer_size 4k;
7.这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cachemax=65535 inactive=60s;
这个是指多长时间检查一次缓存的有效信息。