Nginx官方博客最近发布了一篇文章《Help the World by Healing Your NGINX
Configuration》,文章介绍了几种提高性能和减少网络带宽的非常实用的Nginx优化配置方法,值得参考。
Nginx官方博客最近发布了一篇文章:Help the World by Healing Your NGINX Configuration,文章介绍了几种提高性能和减少网络带宽的非常实用的Nginx优化配置方法。如果你的网站也是和easeapi一样用户量相对较小,可以直接拿来使用。
开启gzip
gzip是若干种不同文件压缩程序的统称,对于文本文件使用gzip压缩可以显著减小传输的文件大小。Nginx默认支持gzip功能,开启即可使用,典型的配置如下:
http { ... ## # Gzip Settings ## gzip on; gzip_disable "msie6"; #传输gzip压缩标志 gzip_vary on; # gzip_proxied any; #压缩级别1-9,级别越高文件越小越费CPU,推荐6 gzip_comp_level 6; #缓冲区大小 gzip_buffers 16 8k; #启用压缩的最小http协议版本 gzip_http_version 1.1; #启用压缩的最小数据长度,小文件压缩作用不大 gzip_min_length 1k; #启用压缩的文件类型,主要针对文本文件 gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ... }
设置Cache Headers
对于资源文件来说,短期内一般不会改变,因此可以针对性的设置较大的缓存时间。当浏览器首次下载到该文件之后,在缓存期间内再次访问会从本地缓存中读取,不会再次向服务器发起请求。典型的配置如下:
location ~* \.(?:jpg|jpeg|gif|png|ico|js|css)$ { expires 30d; add_header Cache-Control "public"; }
此项配置生效后,会在请求的头部增加下面两个字段:
//缓存时间(秒) cache-control: max-age=2592000 //浏览器和缓存服务器都可以缓存 cache-control: public
当然,如果你觉得header中出现两个cache-control不美观(HTTP协议允许两个Cache-Control存在),也可以这样配置:
location ~* \.(?:jpg|jpeg|gif|png|ico|js|css)$ { add_header Cache-Control "public, max-age=2592000"; }
两种写法效果是一样的。
启用HTTP/2协议支持
关于HTTP/2的内容在之前的文章《近期服务器的一些改进》中有过介绍,头部压缩、二进制分帧等技术都可以在一定程度上减少网络流量。
优化日志
请求日志是写在磁盘文件中的,频繁的I/O操作对服务器性能影响较大。有三种方式可以优化:
禁用资源文件的请求log
location ~* \.(?:jpg|jpeg|gif|png|ico|woff2|js|css)$ { access_log off; }
禁用成功请求的log
如果仅需要关心那些访问出现错误的情况,可以禁用请求成功时的log。示例配置:
server { ... #2xx-3xx的请求返回0,其他返回1即记录log map $status $loggable { ~^[23] 0; default 1; } access_log /var/log/nginx/access.log combined if=$loggable; ... }
最小化I/O操作
这个也是我推荐大家使用的。大多数情况下我们还是希望能记录所有的请求日志,包括成功和失败的,以便进行流量分析。这个时候,兼顾到性能,可以考虑使用缓冲区来减小IO操作频次。
#缓冲区512k填满或距离上次刷新时间超过1分钟则写入log
access_log /var/log/nginx/access.log combined buffer=512k flush=1m;
限速
如果网站提供有较大文件的下载,为防止一个请求占用过多的带宽而影响其他人的访问,可以对其进行限速。
location / { #当传输500k后,限速带宽为50k limit_rate_after 500k; limit_rate 50k; }
此外,limit_req_zone、limit_conn_zone也是非常好用的流量控制组件。
这几个非常简单的配置项足以应付个人博客等小型网站,本站已实践效果很明显,光是Cache
Headers这一项就可以减少很多的网络请求。如果你对性能优化有更高或更精细的要求,可以参考原文提供的几个链接,相信对你会有帮助。
原文地址