云服务器运维之Nginx性能优化

访客3年前关于黑客接单1073


本服务由【云技术在线】提供,云技术在线专业提供云服务器运维服务。
Nginx作为高性能web服务器,即使不特意调整配置参数也可以处理大量的并发请求。
这里不讲原理了,以下的Nginx配置参数作为参考,具体需根据线上业务情况进行调整。

worker进程

  • worker_processes

该参数表示启动几个工作进程,建议和本机CPU核数保持一致,每一核CPU处理一个进程。

  • worker_rlimit_nofile

它表示Nginx更大可用的文件描述符个数,需要配合系统的更大描述符,建议设置为102400。
还需要在系统里执行ulimit -n 102400才可以。
也可以直接修改配置文件/etc/security/limits.conf修改
增加:
* soft nofile 655350 (去掉前面的#)
* hard nofile 655350 (去掉前面的#)

  • worker_connections

该参数用来配置每个Nginx worker进程更大处理的连接数,这个参数也决定了该Nginx服务器最多能处理多少客户端请求
(worker_processes * worker_connections),建议把该参数设置为10240,不建议太大。

http和tcp连接

  • use epoll

使用epoll模式的事件驱动模型,该模型为Linux系统下更优方式。

  • multi_accept on

使每个worker进程可以同时处理多个客户端请求。

  • sendfile on

使用内核的FD文件传输功能,可以减少user mode和kernel mode的切换,从而提升服务器性能。

  • tcp_nopush on

当tcp_nopush设置为on时,会调用tcp_cork *** 进行数据传输。
使用该 *** 会产生这样的效果:当应用程序产生数据时,内核不会立马封装包,而是当数据量积累到一定量时才会封装,然后传输。

  • tcp_nodelay on

不缓存data-sends(关闭 Nagle 算法),这个能够提高高频发送小数据报文的实时性。
(关于Nagle算法)
【假如需要频繁的发送一些小包数据,比如说1个字节,以IPv4为例的话,则每个包都要附带40字节的头,
也就是说,总计41个字节的数据里,其中只有1个字节是我们需要的数据。
为了解决这个问题,出现了Nagle算法。
它规定:如果包的大小满足MSS,那么可以立即发送,否则数据会被放到缓冲区,等到已经发送的包被确认了之后才能继续发送。
通过这样的规定,可以降低 *** 里小包的数量,从而提升 *** 性能。】

  • keepalive_timeout

定义长连接的超时时间,建议30s,太短或者太长都不一定合适,当然,更好是根据业务自身的情况来动态地调整该参数。

  • keepalive_requests

定义当客户端和服务端处于长连接的情况下,每个客户端最多可以请求多少次,可以设置很大,比如50000.

  • reset_timeout_connection on

设置为on的话,当客户端不再向服务端发送请求时,允许服务端关闭该连接。

  • client_body_timeout

客户端如果在该指定时间内没有加载完body数据,则断开连接,单位是秒,默认60,可以设置为10。

  • send_timeout

这个超时时间是发送响应的超时时间,即Nginx服务器向客户端发送了数据包,但客户端一直没有去接收这个数据包。
如果某个连接超过send_timeout定义的超时时间,那么Nginx将会关闭这个连接。单位是秒,可以设置为3。

buffer和cache(以下配置都是针对单个请求)

  • client_body_buffer_size

当客户端以POST *** 提交一些数据到服务端时,会先写入到client_body_buffer中,如果buffer写满会写到临时文件里,建议调整为128k。

  • client_max_body_size

浏览器在发送含有较大HTTP body的请求时,其头部会有一个Content-Length字段,client_max_body_size是用来限制Content-Length所示值的大小的。
这个限制body的配置不用等Nginx接收完所有的HTTP包体,就可以告诉用户请求过大不被接受。会返回413状态码。
例如,用户试图上传一个1GB的文件,Nginx在收完包头后,发现Content-Length超过client_max_body_size定义的值,
就直接发送413(Request Entity Too Large)响应给客户端。
将该数值设置为0,则禁用限制,建议设置为10m。

  • client_header_buffer_size

设置客户端header的buffer大小,建议4k。

  • large_client_header_buffers

对于比较大的header(超过client_header_buffer_size)将会使用该部分buffer,两个数值,之一个是个数,第二个是每个buffer的大小。
建议设置为4 8k

  • open_file_cache

该参数会对以下信息进行缓存:
打开文件描述符的文件大小和修改时间信息;
存在的目录信息;
搜索文件的错误信息(文件不存在无权限读取等信息)。
格式:open_file_cache max=size inactive=time;
max设定缓存文件的数量,inactive设定经过多长时间文件没被请求后删除缓存。
建议设置 open_file_cache max=102400 inactive=20s;

  • open_file_cache_valid

指多长时间检查一次缓存的有效信息。建议设置为30s。

  • open_file_cache_min_uses

open_file_cache指令中的inactive参数时间内文件的最少使用次数,
如,将该参数设置为1,则表示,如果文件在inactive时间内一次都没被使用,它将被移除。
建议设置为2。

压缩

对于纯文本的内容,Nginx是可以使用gzip压缩的。使用压缩技术可以减少对带宽的消耗。
由ngx_http_gzip_module模块支持
配置如下:

gzip on; //开启gzip功能
gzip_min_length 1024; //设置请求资源超过该数值才进行压缩,单位字节
gzip_buffers 16 8k; //设置压缩使用的buffer大小,之一个数字为数量,第二个为每个buffer的大小
gzip_comp_level 6; //设置压缩级别,范围1-9,9压缩级别更高,也最耗费CPU资源
gzip_types text/plain application/x-javascript text/css application/xml image/jpeg image/gif image/png; //指定哪些类型的文件需要压缩
gzip_disable "MSIE 6\."; //IE6浏览器不启用压缩

相关文章

怎么才能对方和别人的聊天记录

在孩子生病的时候很多的家长都会选择给孩子吃药,但是吃药是痛苦的,没有人愿意吃药啊。因此很多的家长选择强灌让孩子吃药,宝宝抵抗力较弱,经常会生病吃药,而宝宝喂药难引发的妈妈强行喂药的错误方式却令宝宝危害...

斗战神怎么赚钱?斗战神脚本号一天赚多少

斗战神怎么赚钱?斗战神脚本号一天赚多少

很多玩家都说斗战神赚钱难,其实并不然。小编就给大家介绍一下斗战神中各种赚钱的办法吧! 首先玩家每天的日常是需要全部做完的。其次是宗派任务、挖宝。这些都是每天必做,搬砖任务。还有就是每天的赏金副本...

美国ICU护士:这一selina照片年像在地狱里一样

  新冠疫情失控、压力前所未有 美国ICU护士:这一年像在地狱里一样   美国新冠肺炎疫情的失控让各地的医院承受着前所未有的巨大压力,医护人员长期处于高负荷工作状态。美国有线电视新闻网的记者日前再次...

iPhone 6升级128GB存储爆火 苹果:不予保修

最近,一种能够手工制作为iPhone增加内存的服务项目爆火起來,许多维修手机店面都刚开始出示此项业务流程。只花四五百元,就可以让iPhone从“乞讨者版”变为“顶配版”,的确很令人心动。但是专业人士表...

一般罐头食品的保质期很长这主要是因为?蚂蚁庄园5月12日答案

小鸡宝宝考考你,一般罐头食品的保质期很长这主要是因为 严格密封高温杀菌 添加了化学防腐剂?5月12鸡课堂答案是什么?各位不知道答案的小伙伴们,今天小编就给大家分享了正确的答案。 支付宝蚂蚁庄园5月1...

胃疼怎么缓解疼痛?推荐一个简单又有效的方法

胃疼怎么缓解疼痛?推荐一个简单又有效的方法

肠胃不好是现代上班族白领的通病,饮食不规律、暴饮暴食、常吃生冷食物都会导致肠胃疾病。最靠谱的,平日里就应保养好肠胃,当肠胃突然不舒服的时候,怎么应急缓解呢?下面,教大家几种穴位按摩的方法! 穴位按摩...