上个月接手一个客户的站,服务器配置不低,四核八G,但页面加载就是慢,首屏要三秒多。我看了下nginx配置,好家伙,全是默认值,gzip没开、缓存没配、连接数上限也没调。花了一个下午把配置改完,首屏直接掉到1.5秒以内。今天把这几处改动整理出来,都是改动小、见效快的配置,照着抄就行。
1. 开启gzip压缩,文本体积立减七成
gzip是性价比最高的优化,没有之一。默认配置里gzip是关着的,打开之后,HTML、CSS、JS这些文本文件传输体积能压缩60%到70%。配置就几行:gzip on,加上gzip_types把常见的文本类型列上,再设置gzip_min_length 1k,小于1KB的文件就别压了,压了反而费CPU。
注意一点:如果你的站已经套了CDN,CDN那边可能已经做了压缩,源站再压一遍就重复了,看情况取舍。另外图片别开gzip,图片本身已经是压缩格式,压了没效果还拖慢速度。
2. 静态资源加缓存头,回访用户秒开
图片、CSS、JS这些不常变动的文件,应该让浏览器缓存起来。用location块匹配这些文件类型,加上expires 30d或者Cache-Control: max-age=2592000,回访用户直接从本地缓存读,根本不用再请求服务器。这个设置对二次访问的提速效果最明显,实测能砍掉一半以上的请求量。
代价是更新后用户可能看到旧版本,所以缓存时间别设太长,一个月比较合适,或者配合文件名加版本号,改版的时候换文件名强制刷新。
3. 开启HTTP/2,多请求并发传输
如果你的nginx版本在1.9.5以上,HTTPS配置里加上http2,一个连接就能并发传输多个请求,不用像HTTP/1.1那样排队等。前提是站点必须开HTTPS,HTTP/2目前主流浏览器都要求加密连接才生效。配置只加一个词:listen 443 ssl http2,改完重启就能用。
HTTP/2对图片多、资源多的页面提速明显,资源请求从串行变并行,页面加载时间能砍掉两三成。前提是证书配置正确,证书有问题的话HTTP/2不会生效。
4. 调整worker进程和连接数
worker_processes设置成CPU核数,worker_connections根据内存调大,默认的1024对稍微有点流量的站就不够用了。四核机器我一般配worker_processes 4,worker_connections 4096。这两个参数管的是nginx能同时处理多少连接,配小了高峰期直接丢请求,日志里全是connection refused。
5. 开启TCP优化和keepalive
内核层面两个参数值得开:tcp_nopush和tcp_nodelay,一个管发送效率一个管延迟,配合使用,小文件响应能快一截。还有keepalive_timeout别设太短,默认65秒就行,太短的话每个新请求都要重新握手,开销全花在建立连接上了。反向代理到PHP-FPM的话,upstream里也要配keepalive,复用后端连接,能明显降低CPU占用。
6. 日志裁剪,别让日志吃满磁盘
访问日志默认全量记录,流量一大,日志文件几天就能吃几个G,磁盘满了网站直接挂。配个logrotate按天切割,保留三十天,再在nginx里把静态资源的请求排除掉,日志量能砍掉一大半。这不是速度优化,但磁盘满导致的故障比速度慢可怕多了。
7. 限流配置,防爬虫防攻击
nginx的limit_req模块能按IP限流,对付爬虫和CC攻击很有用。比如对后台登录接口限每秒1次,超出就返回503,能挡住大部分暴力破解。配置逻辑:先定义limit_req_zone,再在location里引用。这个配置平时看不出效果,被攻击的时候能救命。
最后提醒:改配置前先备份,改完用nginx -t检查语法,没问题再reload,reload是平滑的,不影响在线用户。这七条都配上的话,同样的服务器,体验完全两个档次。
标签: nginx优化 网站加速 gzip压缩 HTTP2 服务器配置 性能优化
还木有评论哦,快来抢沙发吧~