般来说nginx配置文件中对优化比较有作用的为以下几项:
worker_processes 8;
1 nginx进程数,建议按照cpu数目来指定,一般为它的倍数。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000
01000000 10000000;
为每个进程分配 cpu,上例中将 8 个进程分配到 8 个 cpu,当然可以写多个,或者将一
个进程分配到多个cpu。
worker_rlimit_nofile 102400;
这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文
件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit
-n的值保持一致。
use epoll;
使用epoll的I/O模型,这个不用说了吧。
worker_connections 102400;
每个进程允许的最多连接数,理论上每台 nginx 服务器的最大连接数为
worker_processes*worker_connections。
keepalive_timeout 60;
keepalive超时时间。
client_header_buffer_size 4k;
客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求
头的大小不会超过 1k,不过由于一般系统分页都要大于 1k,所以这里设置为分页大小。分
页大小可以用命令getconf PAGESIZE取得。
open_file_cache max=102400 inactive=20s;
这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件
数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
open_file_cache_valid 30s;
这个是指多长时间检查一次缓存的有效信息。
open_file_cache_min_uses 1;
open_file_cache指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文
件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,
它将被移除。
2 关于内核参数的优化:
net.ipv4.tcp_max_tw_buckets = 6000
timewait的数量,默认是180000。
net.ipv4.ip_local_port_range = 1024 65000
允许系统打开的端口范围。
net.ipv4.tcp_tw_recycle = 1
启用timewait快速回收。
net.ipv4.tcp_tw_reuse = 1
开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。
net.ipv4.tcp_syncookies = 1
开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies来处理。
net.core.somaxconn = 262144
web 应用中 listen 函数的 backlog 默认会给我们内核参数的 net.core.somaxconn 限制到
128,而nginx定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值。
net.core.netdev_max_backlog = 262144
每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包
的最大数目。
net.ipv4.tcp_max_orphans = 262144
系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数
字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击,
不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。
net.ipv4.tcp_max_syn_backlog = 262144
记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而
言,缺省值是1024,小内存的系统则是128。
net.ipv4.tcp_timestamps = 0
时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间
戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。
net.ipv4.tcp_synack_retries = 1
为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也
就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送 SYN+ACK 包的
数量。
net.ipv4.tcp_syn_retries = 1
在内核放弃建立连接之前发送SYN 包的数量。
net.ipv4.tcp_fin_timeout = 1
如果套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT-2 状态的时间。对端
可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180 秒,
3 你可以按这个设置,但要记住的是,即使你的机器是一个轻载的 WEB 服务器,也有因为大
量的死套接字而内存溢出的风险,FIN- WAIT-2 的危险性比FIN-WAIT-1 要小,因为它最多只
能吃掉1.5K内存,但是它们的生存期长些。
net.ipv4.tcp_keepalive_time = 30
当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2 小时。
下面贴一个完整的内核优化设置:

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
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
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
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000

# Info : The conf for nginx   # Author : dingtm   # CTime : 2010.07.01
  # Info   : The conf for nginx
  # Author : dingtm
  # CTime  : 2010.07.01
  user    www www;           #运行NGINX所使用的用户和组
  worker_processes     4;    #nginx进程数,建议按照cpu数目来指定,一般为它的倍数,每个进程消耗约10M内存
  error_log       /data/logs/nginx/error.log  crit;
  pid             /elain/apps/nginx/nginx.pid;
  worker_rlimit_nofile  65535;   #nginx能打开文件的最大句柄数,最好与ulimit -n的值保持一致,使用ulimit -SHn 65535 设置
  events {
  use epoll;          #使用epoll的I/O模型
  connections 20000;  #每个进程允许的最多连接数
  worker_connections 65535;   #该值受系统进程最大打开文件数限制,需要使用命令ulimit -n 查看当前设置
  maxclients=65535*2
  }
  http {
  include mime.types;           #mine.types内定义各文件类型映像
  types {
  text/html  html;
  image/gif  gif;
  image/jpeg jpg;
  image/png  png;
  }
  default_type application/octet-stream;  #设置默认类型是二进制流,若未设置时,比如未加载PHP时,是不予解析,用浏览器访问则出现下载窗口
   server_names_hash_bucket_size 128;    #不能带单位!配置个主机时必须设置该值,否则无法运行Nginx或测试时不通过,该设置与server_names_hash_max_size 共同控制保存服务器名的HASH表,hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。若hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。若报出hash max size 或 hash bucket size的提示,则我们需要增加server_names_hash_max_size的值。
  client_header_buffer_size 128k;    #客户端请求头部的缓冲区大小,根据系统分页大小设置,分页大小可用命令getconf PAGESIZE取得
   large_client_header_buffers 4 128k;  #4为个数,128k为大小,默认是4k。申请4个128k。当http 的URI太长或者request header过大时会报414 Request URI too large或400 bad request,这是很有可能是cookie中写入的值太大造成的,因为header中的其他参数的size一般比较固定,只有cookie可能被写入较 大的数据,这时可以调大上述两个值,相应的浏览器中cookie的字节数上限会增大。
  client_max_body_size 8m;   #HTTP请求的BODY最大限制值,若超出此值,报413 Request Entity Too Large
  open_file_cache max=65535 inactive=20s;  #max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
  open_file_cache_valid 30s;  #指多长时间检查一次缓存的有效信息
   open_file_cache_min_uses 1; #open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例, 如果有一个文件在inactive时间内一次没被使用,它将被移除。
  server_tokens off;          #关闭错误时Nginx版本显示
  #提高文件传输性能
  sendfile on;                #打开系统函数sendfile()支持
  tcp_nopush on;              #打开linux下TCP_CORK,sendfile打开时才有效,作减少报文段的数量之用
  keepalive_timeout 60;       #keepalive超时时间
  tcp_nodelay on;             #打开TCP_NODELAY在包含了keepalive才有效
  fastcgi_connect_timeout 300; #指定连接到后端FastCGI的超时时间
  fastcgi_send_timeout 300;    #向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。
  fastcgi_read_timeout 300;    #接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。
  fastcgi_buffer_size 64k;     #这里可以设置为fastcgi_buffers指令指定的缓冲区大小
  fastcgi_buffers 16 16k;      #指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答
  fastcgi_busy_buffers_size 128k;  #建议为fastcgi_buffers的两倍
   fastcgi_temp_file_write_size 128k;   #在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍,设置上述数值设置太小时若负载上来时可 能报 502 Bad Gateway
  fastcgi_cache dingtm     #开启FastCGI缓存并且为其制定一个名称,有效降低CPU负载,并且防止502错误
  fastcgi_cache_valid 200 302 1h;  #指定应答代码缓存时间为1小时
  fastcgi_cache_valid 301 1d;      #1天
  fastcgi_cache_valid any 1m;      #其它为1分钟
  fastcgi_cache_min_uses 1;        #缓存在fastcgi_cache_path指令inactive参数值时间内的最少使用次数                f
  gzip on;                    #打开GZIP压缩,实时压缩输出数据流
  gzip_min_length  1k;        #从Content-Length中数值获取验证,小于1K会越压越大
  gzip_buffers  4 16k;        #以16K为单位4倍的申请内存做压缩结果流缓存
  gzip_http_version 1.1;
  gzip_comp_level 3;          #压缩比率1-9,1压缩比最小处理速度最快,9压缩比最大但处理最慢且耗CPU
  gzip_types      text/plain application/x-javascript text/css application/xml;  #压缩类型
  include   vhosts/*.conf;      #虚拟主机
  }
  #虚拟主机
  server {
  listen 80;
  server_name  www.elain.org;     #多域名用空格隔开
  index index.php index.html index.shtml;
  root  /elain/data/htdocs/elain;
  #limit_conn connlimit 20;     #限制一个IP只能最多只能发起20个连接,超过报 503 Service unavailable,可防止恶意连接
  access_log /elain/logs/nginx/access_www.elain.org.log access;
  error_log  /elain/logs/nginx/error_www.elain.org.log;
  location / {
  ssi on;                 #WEB文档根目录打开SSI支持
  ssi_types text/html;
  ssi_silent_errors off;  #处理SSI出错时不提示
  }
  location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
  access_log    off;
  expires       30d;
  }
  location ~ .*.(js|css)?$ {
  expires      1h;
  add_header Cache_Control private;
  }
  location ~ /.ht {
  deny all;
  }
  location /NginxStatus {           #设定查看Nginx状态的地址
  stub_status on;
  access_log off;
  auth_basic “NginxStatus”;     #标识
  auth_basic_user_file conf/.htpasswd;   #网页加密,提示登录框,输入用户名和密码可查看
  }
  location ~ .*.(php|php5)?$ {                           #匹配文件后缀php, php5
  #fastcgi_pass  unix:/tmp/php-cgi.sock;  #SOCKET方式转交fastcgi处理
  fastcgi_pass  127.0.0.1:9000;           #9000端口方式fastcgi
  fastcgi_index index.php;
  include fastcgi_params;                 #包含fastcgi配置
  #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
  }

最新文章

  1. IE10一下的img标签问题
  2. DG配置实验
  3. WPF与winform与silverlight的区别
  4. 利用Bundle在activity之间传递对象
  5. PHP面向对象(OOP)编程入门教程————如何实例化对象?
  6. leetcode 36
  7. Swift 概述及Swift运算符和表达式
  8. laravel学习:修改时区
  9. 在SQLAlter在现场一定的价值
  10. [实验]通过内核Patch去掉iOS-v4.3.3的沙盒特性
  11. 如何在.Net中使用MongoDB
  12. ActiveMQ持久化消息的三种方式
  13. hdu5666 BestCoder Round #80
  14. Linux学习之CentOS(五)--CentOS下VMware-Tools安装
  15. Linux Centos7.5中的RocketMQ集群部署
  16. js_2_逻辑分支
  17. 让Visualstudio在win10下使用管理员方式运行
  18. java打包发布程序.jar(Eclipse)
  19. Codeforces 1045A Last chance 网络流,线段树,线段树优化建图
  20. numpy 之矩阵的认知

热门文章

  1. 三个流行MySQL分支的对比
  2. GP(Geoprocessing)服务的发布与调用
  3. Tomcat问题笔记
  4. Oracle数据库中truncate命令和delete命令的区别
  5. vs2013下git的使用
  6. flappy pig小游戏源码分析(2)——解剖option
  7. 【Spark学习】Apache Spark调优
  8. ffmpeg编码YUV420视频序列
  9. SQL2008-显示表大小行数
  10. 第九章、文件与文件系统的压缩与打包 3. 打包命令: tar