优化Nginx配置提升网站性能

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这一项就可以减少很多的网络请求。如果你对性能优化有更高或更精细的要求,可以参考原文提供的几个链接,相信对你会有帮助。
原文地址

上一篇:Nginx性能优化功能- Gzip压缩(大幅度提高页面加载速度)


下一篇:Nginx 启用gzip压缩