Nginx 优化

nginx可以做什么?

  1. 可针对静态资源高速高并发访问及缓存。
  2. 可使用反向代理加速,并且可进行数据缓存。
  3. 具有简单负载均衡、节点健康检查和容错功能。
  4. 支持远程FastCGI服务的缓存加速。
  5. 支持FastCGI、Uwsgi、SCGI、Memcached Servers的加速和缓存。
  6. 支持SSL、TLS、SNI。
  7. 具有模块化的架构:过滤器包括gzip压缩、ranges支持、chunked响应、XSLT、SSI及图像缩放等功能。在SSI过滤器中,一个包含多个SSI的页面,如果经由FastCGI或反向代理处理,可被并行处理。

作为WEB服务的话支持

  1. 支持基于名字、端口及IP的多虚拟主机站点。
  2. 支持Keep-alive和pipelined连接。
  3. 可进行简单、方便、灵活的配置和管理。
  4. 支持修改Nginx配置,并且在代码上线时,可平滑重启,不中断业务访问。
  5. 可自定义访问日志格式,临时缓冲写日志操作,快速日志轮询及通过rsyslog处理日志。
  6. 可利用信号控制Nginx进程[注释]。
  7. 支持3xx-5xx HTTP状态码重定向。404文件找不到 301重定向 302 永久重定向 403 没有权限 500 服务器错误 502 网关错误
  8. 支持rewrite模块,支持URI重写及正则表达式匹配。
  9. 支持基于客户端IP地址和HTTP基本认证的访问控制。
  10. 支持PUT、DELETE、MKCOL、COPY及MOVE等较特殊的HTTP请求方法。
  11. 支持FLV流和MP4流技术产品应用。
  12. 支持HTTP响应速率限制。
  13. 支持同一IP地址的并发连接或请求数限制。
  14. 支持邮件服务代理。

简单点就是支持以下三种应用场景

  • (1)作为Web服务软件

  • (2)反向代理或负载均衡服务

  • (3)前端业务数据缓存服务

隐藏版本号

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

修改nginx的worker_processes

默认可以设置为CPU的核数相等,并发比较大的时候,可以设置为cpu核数*2

分配每一个进程使用一个核数

worker_cpu_affinity 0001 0010 0100 1000 #四核
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000 #八核心

事件处理模型优化

Nginx的连接处理机制在不同的操作系统会采用不同的I/O模型,在Linux下,Nginx使用epoll的I/O多路复用模型,在Freebsd中使用kqueue的I/O多路复用模型,在Solaris中使用/dev/poll方式的I/O多路复用模型,在Windows中使用的是icop,等等。 要根据系统类型选择不同的事件处理模型,可供使用的选择有“use[kqueue|rtsig|epoll|/dev/poll|select|poll];”。

events {
  use epoll;
  
}

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

worker_connects = 1024

总共处理能力 = worker_processes * worker_connects

 worker_rlimit_nofile 65535;

开启sendfile

高效文件传输模式

连接超时的参数设置

  1. client_header_timeout

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

  1. 设置参数:tcp_nodelay on;

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

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

  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及用户端需要重新缓存内容。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 我已经谈过一些关于Nginx的常见问题; 其中有一些是关于如何优化Nginx. 很多Nginx新用户是从Apach...
    daniel_hao阅读 2,601评论 0 10
  • 参考文章 http://blog.csdn.net/xifeijian/article/details/20956...
    wfwf1990阅读 218评论 0 0
  • nginx的安装与基本配置文档网上已经有很多了,但具体讲优化的文章还比较少,偶尔发现有这么一篇《nginx优化 突...
    yichen_china阅读 8,640评论 0 65
  • nginx优化 突破十万并发 一、一般来说nginx 配置文件中对优化比较有作用的为以下几项: worker_pr...
    SkTj阅读 961评论 0 4
  • 《老男孩Linux运维》笔记 隐藏Nginx软件版本号 一般来说,软件的漏洞都和版本有关。因此要尽量隐藏对访问用户...
    Zhang21阅读 3,623评论 0 28