Nginx的优化

Posted zynet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx的优化相关的知识,希望对你有一定的参考价值。


 

nginx配置文件优化

#当实际环境中域名主机多了,会导致主配置文件的条目变多,看的时候会出现一定的误差,所以我们可以使用Include来优化配置文件
#主配置文件nginx.conf的配置
worker_processes  10;
error_log /var/log/nginx/error.log crit;
events {
    worker_connections  1024;
    use epoll;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;
    include    /usr/local/nginx/extra/nginx_vhosts.conf; #这里我给的绝对路径,也可以给相对路径
}
#包含文件nginx_vhosts.conf
server{
    listen 80;
    server_name www.daniel.org daniel.org;
    error_log /var/log/nginx/daniel/daniel_error.log;
    access_log /var/log/nginx/daniel/daniel_access.log;
    location / {
        root /var/www/html/www;
        index index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root  /usr/lcoal/nginx/html;
        }

}

  

expires缓存优化

  什么是expires?当你访问百度的一张照片的时候,百度可以使用expires来决定这张图片字啊你本地缓存多久,就可以不用再下载了,比如一个小时。缺点就是,如果百度换图片了,那么用户还是显示的原来的内容,也可以解决这个问题,那就是在服务器端改名弥补过期缓存问题

#案例1
location ~.*\.(gif|jpg|jpeg|png|bmp|swf)$ #以括号里为扩展名的缓存十年
{
        root /var/www/html/www
        expires   3650d;
}

#案例2
location ~.*\.(js|css)?$  #以括号里为扩展名的缓存三十天
{ 
        root /var/www/html/www
        expires    30d;
}

#特别注意:location内容一般要放到虚拟主机配置中,即server标签中


#location修饰符
= 使用精确匹配并终止搜索
~ 区分大小写的正则表达式匹配
~* 不区分大小写的正则表达式匹配
^~ 如果该location是最佳的匹配,那么对于匹配这个location的字符串不再进行正则表达式检测。注意这不是一个正则表达式匹配-它的目的是优先于正在表达式的匹配

#我们curl一下看看
[[email protected] nginx]# curl -I www.daniel.org/a.jpg
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Tue, 30 Jan 2018 06:04:47 GMT
Content-Type: image/jpeg
Content-Length: 350272
Last-Modified: Wed, 22 Nov 2017 14:34:08 GMT
Connection: keep-alive
ETag: "5a158ae0-55840"
Expires: Fri, 28 Jan 2028 06:04:47 GMT #到期时间2028年
Cache-Control: max-age=315360000
Accept-Ranges: bytes
#缓存时间可以是年(y)、天(d)、时(h),缓存对象可以是jpg、jpeg、png、jss、css等静态文件

#也可以根据目录来设置缓存(expires功能)

location ~^/(images|javascript|Js/css/flash/media/static)/{
    expires 360d;
}

#单个文件设置过效期
location ~(daniel.txt) {
    log_not_found off;
    expires 7d;
    break;
}
#设置过期时间并不记录404错误日志

  

压缩优化

   当用户请求一个视频的时候,服务器如果返回整个视频给用户的话就会导致流量占用过大、传输变慢的情况,如果先压缩(gzip)一下再传就好得多了,用户收到后(在浏览器端),就会解压,然后看到了视频。压缩的好处可以降低带宽,提升访问速度

#此模块类似apache的mod_deflate压缩功能,nginx的是ngx_http_gzip_module默认已安装
#压缩配置
gizp on;  #开启
gzip_min_length 1k;        #设置允许压缩的页面最小字节数,页面字节数header头的Content-length中获取。默认是0,不管多大都进行压缩。建议设置成大于1k。如果小于1k可能会越压越大
gzip_buffers 4 16k;        #压缩缓冲区大小。表示申请四个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
gzip_http_version 1.0;        #压缩版本(默认为1.1,前端为squid2.5时使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
gzip_comp_level 2;        #压缩比率。用来指定gzip压缩比,1压缩比最小,处理速度最快,9压缩比最大,传输速度快,处理最慢,也比较消耗cpu资源
gzip_types text/plain application/x-javascript text/css application.xml;        #用来指定压缩的类型,“text/html”类型总是会被压缩
gzip_vary on;
vary header支持。该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如Squid缓存经过nginx压缩的数据。

#压缩配置可以放在http,localtion,server里
#实战配置
      
server{
    listen 80;
    server_name www.daniel.org daniel.org;
    error_log /var/log/nginx/daniel/daniel_error.log;
    access_log /var/log/nginx/daniel/daniel_access.log;
    location / {
        root /var/www/html/www;
        index index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root  /usr/lcoal/nginx/html;
        }
    location ~.*\.(gif|jpg|jpeg|png|bmp|swf|js|xml)$
   {
        root /var/www/html/www;
        expires   3650d;
    }
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application.xml;
    gzip_vary on;
}#新建一个xml和js文件大于1k就行,然后我们curl一下查看
[[email protected] nginx]# curl  -I daniel.org/4.js
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Tue, 30 Jan 2018 07:22:17 GMT
Content-Type: application/javascript
Content-Length: 392143
Last-Modified: Tue, 30 Jan 2018 07:09:02 GMT
Connection: keep-alive
ETag: "5a701a0e-5fbcf"
Expires: Fri, 28 Jan 2028 07:22:17 GMT #
Cache-Control: max-age=315360000
Accept-Ranges: bytes

#压缩对象:
1.大于1k的纯文本文件,图片、视频等不要压缩,因为不但不会减小,在压缩时消耗cpu,mem资源

  

Nginx错误页面的显示配置

 

#当用户访问的时候会出现一些错误,比如403,404,我们可以指定当这些错误出现时跳转到指定页面
erver{
    listen 80;
    server_name www.daniel.org daniel.org;
    error_log /var/log/nginx/daniel/daniel_error.log;
    access_log /var/log/nginx/daniel/daniel_access.log;
    location / {
        root /var/www/html/www;
        index index.html index.htm;
        error_page 403 /403.html; #匹配错误并指定跳转页面 #/403.html只是相对路径,相对于上面的root /var/www/html/www
        location = /403.html {  #匹配页面,跳转到指定页面,这里是403.html
            root /var/www/html/error/;
            index 403.html;
}
    }
    location ~.*\.(gif|jpg|jpeg|png|bmp|swf|js|xml)$
   {
        root /var/www/html/www;
        expires   3650d;
    }
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application.xml;
    gzip_vary on;
}

#404跳转
#404跳转比较特殊,必须要加fastcgi_intercept_errors on,自定义的404页面必须大于512节,否则可能会出现IE默认的404页面
        error_page 404 /404.html;
        fastcgi_intercept_errors on;
        location = /404.html{
            root /var/www/html/error;
            index 404.html;
        }

 

  

 

  

 

 

 


 

以上是关于Nginx的优化的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化

如何优化C ++代码的以下片段 - 卷中的零交叉

Nginx——Nginx启动报错Job for nginx.service failed because the control process exited with error code(代码片段

从JVM的角度看JAVA代码--代码优化

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段

将 nginx rtmp 片段发送到 WebRTC