优化Nginx配置提升网站性能
原创 2020-05-01
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这一项就可以减少很多的网络请求。如果你对性能优化有更高或更精细的要求,可以参考原文提供的几个链接,相信对你会有帮助。
相关文章:
使用CDN提升网站访问速度
perl: warning: Setting locale failed.
MAC升级PHP7及Apache错误排查笔记
net::ERR_HTTP2_PROTOCOL_ERROR