热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nginx之四:Nginx服务器的压缩功能和缓存功能

在Nginx服务器配置文件中可以通过配置Gzip的使用,可以配置在http块,server块或者location块中设置,Nginx服务器

  在Nginx服务器配置文件中可以通过配置Gzip的使用,可以配置在http块,server 块或者location块中设置,Nginx服务器可以通过ngx_http_gzip_module模块、ngx_http_static_module 模块功能ngx_http_gunzip_module模块对这些指令进行分析和处理。

一:ngx_http_gzip_module模块处理的指令:

1、gzip:

用于打开或者关闭gzip压缩的功能,用法如下:

gzip on | off ; #默认为off

2、gzip_buffers:

用于指定gzip功能压缩文件时使用的缓存空间的大小,语法结构为:

gzip_buffers numner | size ;
number #指定Nginx服务器需要向服务器申请的缓存空间的个数
size #指定每个缓存空间的大小,从Nginx
0.7.8开始,默认number * siez的的值为128,其中size取系统中内存页一页的大小,为4k或者8k等

gzip_buffers 32 4k | 12 8k;

3、gzip_comp_level  

 指定gzip压缩级别,级别为1-9,默认为1,级别越高压缩率越高即压缩后的文件越小,但是越占用CPU,压缩率越小压缩后的文件越大,但是节约CPU。

gzip_comp_level 4; #推荐先设置为中间的值,比如4或者5

4、gzip_disbale

针对不同客户端发起的请求进行有选择的打开或关闭gzip命令,后面跟浏览器的名称,用法如下:

gzip_disable MSIE[1-6]\. #使用正则表达式可以匹配UC字符串中MSIE 1-6 的浏览器,这三个浏览器在发起请求后Nginx将不进行数据包的压缩。

5、gzip_http_verson

早期的一些浏览器或者http客户端可能不支持gzip压缩,因此有客户有时候会看到乱码,那是应为客户端无法进行解压,因此可以根据不同的http协议版本进行选择性的打开或关闭gzip功能,用法如下:

gzip_http_version 1.0 | 1.1; #对使用htto协议1.0和1.1的请求进行压缩

6、gzip_min_length

设置最少压缩的数据包大小,小于此值的数据包将不被压缩,因为大量的小的数据压缩后没有明显的效果还占用了CPU的资源,因此可以设置最少多大的数据才进行压缩,用法如下:

gzip_min_length 1024; #默认为20,建议设置位1KB,如果设置为0则表示压缩全部数据包

7、gzip_proxine 

在Nginx 服务器作为反向代理的时候有效,用于设置nginx 服务器是否对后端返回的结果进行gzip压缩,用法如下:

gzip_proxied off | any; #off为关闭,any为压缩所有后端服务器返回的数据。

8、gzip_types

设置Nginx服务器可以根据响应页面的类型进行选择性的打开或关闭gzip功能,用法如下:

gzip_types text/plain application/x-Javascript text/css application/xml; #一般情况下如此设置

9、gzip_vary

用于设置是否在使用gzip功能时发送带有"vary:Accept-Encoding" 头域的响应头部,该头域的主要功能时要告诉客户端数据已经在服务器进行了压缩,默认设置为off,用法如下:

gzip_vary on| off; #默认为off
还可以使用Nginx 配置的add_header指令强制在Nginx服务器的响应头部添加“Vary:Accept
-Encoding”也可以实现相同的效果。

二:ngx_http_gzip_static_module 模块:

该模块辅助用于搜索和发送经过gzip功能压缩的数据,这些数据以*.gz作为后缀名存储在服务器上,如果客户端请求的数据之前被压缩过,并且客户端的浏览器支持压缩,将直接范湖压缩后的数据,该模块使用的是静态编码,在http响应头部包含content-length头域来指明报文的长度,用于服务器可以确定响应数据的长度的情况,而ngx_http_gzip_module使用chunked编码动态压缩,主要用于服务器无法确定响应数据长度的情况,比如较大文件的下载等情形,此时就要实时生成数据的长度,用法与ngx_http_gzip_module一样,如下:

1、gzip_static 

gzip_static off | on | always; #on为开启并检查客户端浏览器是否中吃gzip压缩功能,off为关闭,always一直发送gzip压缩文件,而不检查浏览器是否支持gzip压缩

 注:这是一个可选模块,如果要使用,必须在编译nginx时添加--with-http_gzip_static_module编译,与该模块有关的 指令与ngx_http_gzip_module的模块使用方法是一致的,本模块有gzip_static、gzip_http_version、gzip_proxied、gzip_disable和gzip_vary等。

三:ngx_http_gunzip_module 模块处理的两个指令

1、gunzip

设置Nginx服务器对不支持gzip的客户端返回解压后的数据,如果客户的浏览器支持压缩还仍然返回压缩的后的数据,及可以同时响应支持gzip的浏览器进程压缩,有可以响应不支持gzip的浏览器。

gunzip on|off ;#on为打开off为关闭

2、gunzip_buffers #用于设置nginx服务器解压gzip文件时候使用的缓存空间大小的,用法如下:

gunzip_buffers number size; #number为nginx服务器向系统向系统申请缓存空间的个数,size为每个空间的大小,单位为k,默认情况下number * size的大小为128k,其中size 的值取系统内存页一页的大小为4KB或者8KB即可,用法如下:
gunzip_buffers
32 4k | 16 8k; #与ngx_http_gzip_module模块下的使用方法一致。

注:这是一个可选模块,如果要使用需要在nginx 编译安装的时候使用--with-http_gunzip_module 指令进行编译

 

四:缓存功能:

1.memcached缓存数据库常用数据。

2.xcache缓存php编译的结果,可以在多个进程之间共享xcode结果。

3.nginx的缓存是缓存opcode处理后的结果,避免客户端请求同一个页面而导致程序每次都处理一下,即再访问同一个页面,直接使用处理后的缓存即可直接返回。

 

五:正向代理和反向代理:

1.正向代理:工作在用户前端,用户请求的所有内容都经过代理服务器。

2.反向代理:工作在服务器前端,只代理请求次服务器的客户端请求,被其代理的服务器叫做"代理服务器"或者"上游服务器"。

转:https://www.cnblogs.com/zhang-shijie/p/5451919.html



推荐阅读
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 使用ArcGIS for Java和Flex浏览自定义ArcGIS Server 9.3地图
    本文介绍了如何在Flex应用程序中实现浏览自定义ArcGIS Server 9.3发布的地图。这是一个基本的入门示例,适用于初学者。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文介绍了如何使用Java和PDFBox库根据坐标值对PDF文件进行局部切割的方法。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • Java能否直接通过HTTP将字节流绕过HEAP写入SD卡? ... [详细]
author-avatar
kiruma
phper,javaer,hacker
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有