• nginx优化


    Nginx运行工作进程数量

    Nginx运行工作进程个数一般设置CPU的核心或者核心数x2。如果不了解cpu的核数,可以top命令之后按1看出来

    [root@ lxl ~]# vim /usr/local/nginx/conf/nginx.conf
    worker_processes  2;   修改工作进程数量为2

    查看 [root@ lxl
    ~]# /usr/local/nginx/sbin/nginx -s reload [root@ lxl ~]# ps -aux|grep nginx|grep -v grep root 5346 0.0 0.1 20544 1476 ? Ss 09:57 0:00 nginx: master process /usr/local/nginx/sbin/nginx nobody 6873 3.0 2.8 47680 28184 ? S 10:58 0:00 nginx: worker process nobody 6874 2.5 2.8 47680 28184 ? S 10:58 0:00 nginx: worker process

    worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了.

    调整Nginx单个进程允许的客户端最大连接数

    worker_connects = 1024

    总共处理能力 = worker_processes * worker_connects

    events {
        worker_connections  65535;
    }

    隐藏版本号

    #在http里面添加一行
    server_tokens off;

    开启sendfile

    高效文件传输模式

    连接超时的参数设置

    1. client_header_timeout

    用于设置客户端连接保持会话的超时时间为60秒。超过这个时间,服务器会关闭该连接,此数值为参考值。

    1. 设置参数:tcp_nodelay on;

      用于激活tcp_nodelay功能,提高I/O性能。

      参数作用:默认情况下当数据发送时,内核并不会马上发送,可能会等待更多的字节组成一个数据包,这样可以提高I/O性能。但是,在每次只发送很少字节的业务场景中,使用tcp_nodelay功能,等待时间会比较长。

      该参数最核心的功能,就是把小包组成成大包,提高带宽利用率也就是著名的nagle算法
      ● tcp协议中,有一个现象:应用层数据可能很低(比如1个字节),而传输层开销有40字节(20字节的IP头+20字节的TCP头)。这种情况下大部分都是控制包的传输,既加大了带宽的消耗,带宽利用率也不高
      ● nagle算法就是为了解决这个问题。在发出去的数据还未被确认之前,或者说还没有收到对端的ack之前,新生成的小包是不允许被发送的,必须要凑满一个MSS或者等到收到确认后再发送,直至超时

    2. 设置参数:client_header_timeout 15;

      用于设置读取客户端请求头数据的超时时间。此处的数值15,其单位是秒,为经验参考值。

    3. client_body_timeout 15;

      用于设置读取客户端请求主体的超时时间,默认值是60。

      参数作用:设置读取客户端请求主体的超时时间。这个超时仅仅为两次成功的读取操作之间的一个超时,非请求整个主体数据的超时时间,如果在这个超时时间内,客户端没有发送任何数据,Nginx将返回“Request time out(408)”错误,默认值是60

    4. send_timeout 25;

      用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接,默认值为60秒,可以改为参考值25秒。

    上传文件大小的限制

    client_max_body_size 8m

    参数作用:设置最大的允许的客户端请求主体大小,在请求头域有“Content-Length”,如果超过了此配置值,客户端会收到413错误,意思是请求的条目过大,有可能浏览器不能正确显示。设置为0表示禁止检查客户端请求主体大小。此参数对提高服务器端的安全性有一定的作用。

    php上传文件大小500M以下就行了。1G

    flash上传,断点续传。

    FastCGI调优

    开启GZIP的压缩

    gzip on
    gzip_min_length  1k #设置允许压缩的页面最小字节数,页面字节数从header 头的 Content-Length 中获取
    gzip_buffers     4 16k #压缩缓冲区大小。表示申请 4 个单位为 16K 的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储
    gzip_http_version 1.1   #压缩版本(默认 1.1 ,前端为 squid2.5 时使用 1.0 )
    gzip_comp_level 2; #压缩比率。用来指定 gzip 压缩比, 1 压缩比最小,处理速度最快;
    gzip_types  text/plain application/x-javascript text/css application/xml; #用来指定压缩的类型,“ text/html ”类型总是会被压缩,这个就是 HTTP 原理部分讲的媒体类型。
    gzip_vary on #支持。该选项可以让前端的缓存服务器缓存经过 gzip 压缩的页面,例如用 Squid 缓存经过 Nginx 压缩的数据
    
    1. Nginx gzip压缩功能介绍

    Nginx gzip压缩模块提供了压缩文件内容的功能,用户请求的内容在发送到用户客户端之前,Nginx服务器会根据一些具体的策略实施压缩,以节约网站出口带宽,同时加快数据传输效率,来提升用户访问体验。

    1. Nginx gzip压缩的优点

    提升网站用户体验:发送给用户的内容小了,用户访问单位大小的页面就加快了,用户体验提升了,网站口碑就好了。 ·节约网站带宽成本:数据是压缩传输的,因此节省了网站的带宽流量成本,不过压缩时会稍微消耗一些CPU资源,这个一般可以忽略。 此功能既能提升用户体验,又能使公司少花钱,一举多得。对于几乎所有的Web服务来说,这是一个非常重要的功能,Apache服务也有此功能。

    1. 需要和不需要压缩的对象

    纯文本内容压缩比很高,因此,纯文本的内容最好进行压缩,例如:html、js、css、xml、shtml等格式的文件。

    被压缩的纯文本文件必须要大于1KB,由于压缩算法的特殊原因,极小的文件压缩后可能反而变大。

    图片、视频(流媒体)等文件尽量不要压缩,因为这些文件大多都是经过压缩的,如果再压缩很可能不会减小或减小很少,或者有可能增大,同时压缩时还会消耗大量的CPU、内存资源。

    1. 参数介绍及配置说明

    此压缩功能与早期Apache服务的mod_deflate压缩功能很相似,Nginx的gzip压缩功能依赖于ngx_http_gzip_module模块,默认已安装。

    Nginx压缩配置效果检查 可通过火狐浏览器加yslow插件查看gzip压缩及expires缓存结果。提前安装好火狐浏览器,并且安装好yslow插件,开启监控,然后打开LNMP时安装的博客地址,就可以看到如图8-7所示的压缩结果。

    Google浏览器(Chrome):通过该浏览器直接按F12键即可查看压缩及缓存结果,另外,谷歌浏览器(Chrome)上也可以直接安装yslow插件(如图8-8所示)。 [图片]图8-8 调试工具yslow.org网站 ·火狐浏览器:在该浏览器上安装firebug、yslow(http://yslow.org/),即可进行调试(如图8-9所示)。 ·IE浏览器:在该浏览器上安装httpwatch即可进行调试(省略)。

    expires缓存设置

    #(1)根据文件扩展名进行判断,添加expires功能范例
    #范例1:该范例的意思是当用户访问网站URL结尾的文件扩展名为上述指定类型的图片时,设置缓存3650天,即10年。
    location ~ .*\. nginx (gif|jpg|jpeg|png|bmp|swf)$
    {
        expires 3650d ;
    }
    
    #范例2:
    location ~ .*\.(js|css)$
    {
        expires      30d;
    }
    
    ##根据URI中的路径(目录)进行判断,添加expires功能范例
    location ~ ^/(images|javascript|js|css|flash|media|static) / 
    {
      expires 360d
    }
    
    ##单个文件添加expires功能的范例
    location ~ (robots.txt)
    {
        expires 7d;
        break;
    }
    

    当网站被缓存的页面或数据更新了,此时用户端看到的可能还是旧的已经缓存的内容,这样就会影响用户体验,那么如何解决这个问题呢?解决办法如下。 第一,对于经常需要变动的图片等文件,可以缩短对象缓存时间,例如:谷歌和百度的首页的图片经常根据不同的日期换成一些节日的图,所以这里可以将这个图片设置为缓存期为1天。

    第二,当网站改版或更新时,可以在服务器将缓存的对象改名(网站代码程序)。 ·对于网站的图片、附件,一般不会被用户直接修改,用户层面上的修改图片,实际上是重新传到服务器,虽然内容一样但是是一个新的图片名了。 ·网站改版升级会修改JS、CSS元素,若改版时对这些元素改了名,会使得前端的CDN及用户端需要重新缓存内容。

  • 相关阅读:
    【leetcode】Recover Binary Search Tree
    【leetcode】Dungeon Game
    【leetcode】Text Justification
    【leetcode】Largest Number
    【leetcode】Merge k Sorted Lists
    【leetcode】Reverse Nodes in k-Group
    【leetcode】Multiply Strings
    【leetcode】Unique Binary Search Trees II
    hdu 1885 bfs+状压
    hdu 1429 bfs+状态压缩
  • 原文地址:https://www.cnblogs.com/l999999999/p/12148411.html
Copyright © 2020-2023  润新知