nginx优化

一,nginx优化:
     主要针对nginx.conf这个文件。
     对性能提升比较明显的参数主要有:
               worker_processes 4;    、
               #nginx进程数,一般设置为cpu核心数的2倍。
               worker_cpu_affinity 0001 0010 0100 1000;
               #将4个nginx进程平均分配给4个cpu。
               
worker_rlimit_nofile 10240;  
               #
这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是
               # nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。ulimit的用法参考:http://blog.haohtml.com/archives/9883
               events {                   
                          use epoll;           
                          #选择epoll的I/O模型。与系统环境有关。nginx比apache并发支持高就与采用了这个模型有关。具体原理
                          #请参考:http://blog.csdn.net/xifeijian/article/details/17385831

                          worker_connections 1024;  #每个进程允许的最大连接数,根据实际业务量进行设置,设的太大并没有什么意义。
                          multi_accept on;  #通知nginx收到一个新连接通知后接受尽可能多的连接。
                       }

    http{
             server_tokens off; 
            
#和性能无关,关闭nginx在错误页面中显示的版本号的
           
          sendfile on;
    #
可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。
    #Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,
    #write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,
    #sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile) 
         
          tcp_nopush on;
             #告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送    
          tcp_nodelay on;
             #告诉nginx不要缓存数据,提高nginx的数据响应速度。发送一小块数据信息时就能立即得到返回值
       keepalive_timeout 30;
        #keepalive超时时间,30或者更短一点都可以。
       client_header_timeout 10;
       client_body_timeout   10;

      #设置请求头和请求体(各自)的超时时间。    
       reset_timedout_connection on;   
       #及时关闭不响应的客户端链接,释放其资源。
       send_timeout 10;  
       #指定客户端的超时时间。
       limit_conn_zone $binary_remote_addr zone=addr:5m;
     #设置用于保存各种key(比如当前连接数)的共享内存的参数
       limit_conn addr 50;
       #设置单个IP的最大连接数。注意 这个参数是会影响你本地ab测试的,你测试的时候并发数会被限制。

      gzip on;
      gzip_min_length 1k;
    #大于1K才压缩
      gzip_buffers 4 8k;
      gzip_disable "msie6";
      gzip_proxied any;
      gzip_comp_level 4;
      gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
}


二,php-fpm优化

     重要参数:
pm = dynamic
        #选择进程模式为动态,以下第一个参数失效,后面三个参数生效。如果选择static(静态),则只有以下第一个参数生效(pm.max_children)

pm.max_children = 200

  #静态模式时的固定子进程数
pm.start_servers = 1
  #动态模式下起始进程数
pm.min_spare_servers = 1
#动态模式下允许的最小空闲进程。
pm.max_spare_servers = 10
  #动态模式下允许的最大空闲进程

三,内核参数优化
       主要针对文件:/etc/sysctl.conf

重要参数:
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来处理,可防范少量SYN攻击。
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 = 30
  #如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接
#,甚至意外当机。缺省值 是60 秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的
#机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1
    #要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。

net.ipv4.tcp_keepalive_time = 30
  #当keepalive启用的时候,TCP发送keepalive消息的频度。缺省是2小时。


 

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值