1.优化配置文件 vim /usr/local/nginx/conf/nginx.conf
增加并发量
worker_processes 1; //进程数,与CPU核心数量一致
worker_rlimit_nofile 100000; //一个进程打开的最多文件数
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000 //为每个进程分配cpu,上例中将8 个进程分配到8 个cpu,当然可以写多个,或者将一个进程分配到多个cpu
events { //events模块中包含nginx中所有处理连接的设置
worker_connections 2048; //每个worker(进程)最大并发连接数
multi_accept on; //在Nginx接到一个新连接通知后调用accept()来接受尽量多的连接
use epoll; //使用epoll的I/O模型
}
http { //HTTP模块控制着nginx http处理的所有核心特性
server_tokens off; //隐藏掉版本号,提高安全性
sendfile on; //开启sendfile系统调用传输文件,提升文件传输性能
tcp_nopush on; //将响应头和正文的开始部分一起发送
tcp_nodelay on; //这个选项仅在将连接转变为长连接的时候才被启用
access_log off; //关闭access_log,即不记录访问日志,可以让读取磁盘IO操作更快
error_log error.log crit; //错误日志记录级别,默认crit(记录最少),告诉nginx只能记录严重的错误
keepalive_timeout 10; // keepalive超时时间
client_header_timeout 10; //客户端向服务端发送一个完整的 request header(请求头) 的超时时间
client_body_timeout 10; //指定客户端与服务端建立连接后发送 request body(请求体) 的超时时间
reset_timedout_connection on; //告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。
send_timeout 10; //指定客户端的响应超时时间
include mime.types; //只是一个在当前文件中包含另一个文件内容的指令
default_type text/html; //设置文件使用的默认的MIME-type
charset UTF-8; //仅需要中文时需要改选项,可选项
对页面进行压缩处理
gzip on; //采用gzip压缩的形式发送数据
gzip_disable "msie6"; //为指定的客户端禁用gzip功能
gzip_proxied any; //压缩所有的请求
gzip_min_length 1000; //设置对数据启用压缩的最少字节数
gzip_comp_level 6; //设置数据的压缩等级
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; //设置需要压缩的数据格式
服务器内存缓存
open_file_cache max=100000 inactive=20s; //打开缓存的同时也指定了缓存最大数目,以及缓存的时间
open_file_cache_valid 30s;//检测正确信息的间隔时间,文件句柄的有效时间是30秒,30秒后过期
open_file_cache_min_uses 2; //只有访问次数超过5次会被缓存,定义了open_file_cache中指令参数不活动时间期间里最小的文件数。
open_file_cache_errors on; //指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
2.优化内核参数
vi /etc/sysctl.conf CentOS5.5中可以将所有内容清空直接替换为如下内容:
net.ipv4.ip_forward = 0 //
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1 //开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies 来处理
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000 //timewait的数量,默认是180000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144 //每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.somaxconn = 262144 //web应用中listen 函数的backlog 默认会给我们内核参数的net.core.somaxconn 限制到128,而nginx 定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值。
net.ipv4.tcp_max_orphans = 3276800 //系统中最多有多少个TCP 套接字不被关联到任何一个用户文件句柄上
net.ipv4.tcp_max_syn_backlog = 262144 //记录的那些尚未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_timestamps = 0 //时间戳可以避免序列号的卷绕
net.ipv4.tcp_synack_retries = 1 //这个设置决定了内核放弃连接之前发送SYN+ACK 包的数量。
net.ipv4.tcp_syn_retries = 1 //在内核放弃建立连接之前发送SYN 包的数量。
net.ipv4.tcp_tw_recycle = 1 //启用timewait 快速回收
net.ipv4.tcp_tw_reuse = 1 //开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1 //如 果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2 状态的时间
net.ipv4.tcp_keepalive_time = 30 //当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时
net.ipv4.ip_local_port_range = 1024 65000 //允许系统打开的端口范围。
使配置立即生效可使用如下命令:
/sbin/sysctl -p
3.关于系统连接数的优化
linux默认值 open files 和 max user processes 为 1024,查看 ulimit -n , ulimit Cu
问题描述:
说明server 只允许同时打开 1024 个文件,处理 1024 个用户进程
使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。
新装的linux 默认只有1024 ,当作负载较大的服务器时,很容易遇到error: too many open files 。因此,需要将其改大。
解决方法:
使用ulimit Cn 65535 可即时修改,但重启后就无效了
有如下三种修改方式:
1.在/etc/rc.local 中增加一行 ulimit -SHn 65535
2.在/etc/profile 中增加一行 ulimit -SHn 65535
3.在/etc/security/limits.conf 最后增加:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
具体使用哪种,在CentOS 中使用第1 种方式无效果,使用第3 种方式有效果,而在Debian 中使用第2 种有效果
4.关于FastCGI 的几个指令
在配置文件vim /usr/local/nginx/conf/nginx.conf
http
{
......
keepalive_timeout 60;
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 //这个指令为FastCGI 缓存指定一个路径,目录结构等级
keys_zone=TEST:10m //关键字区域存储时间
inactive=5m; //非活动删除时间
fastcgi_connect_timeout 300; //指定连接到后端FastCGI 的超时时间
fastcgi_send_timeout 300; //向FastCGI 传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI 传送请求的超时时间
fastcgi_read_timeout 300; //接收FastCGI 应答的超时时间,这个值是指已经完成两次握手后接收FastCGI 应答的超时时间
fastcgi_buffer_size 4k; //指定读取FastCGI 应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,由于页面大小为4k,所以这里设置为4k
fastcgi_buffers 8 4k; //指定本地需要用多少和多大的缓冲区来缓冲FastCGI 的应答
fastcgi_busy_buffers_size 8k; //
fastcgi_temp_file_write_size 8k; //在写入fastcgi_temp_path 时将用多大的数据块,默认值是fastcgi_buffers 的两倍。
fastcgi_cache TEST; //开启FastCGI 缓存并且为其制定一个名称。个人感觉开启缓存非常有用,可以有效降低CPU 负载,并且防止502 错误
fastcgi_cache_valid 200 302 1h; //
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m; //为指定的应答代码指定缓存时间,如上例中将200,302 应答缓存一小时,301 应答缓存1 天,其他为1 分钟
fastcgi_cache_min_uses 1; //缓存在fastcgi_cache_path 指令inactive 参数值时间内的最少使用次数,如上例,如果在5 分钟内某文件1 次也没有被使用,那么这个文件将被移除
fastcgi_cache_use_stale error timeout invalid_header http_500; //
......