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

Nginxrewrite模块详解、expires缓存配置及gzip压缩策略

一、rewrite使用rewrite的主要功能是实现URI地址的重定向,将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为rep

一、rewrite使用

rewrite的主要功能是实现URI地址的重定向,将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI,即使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端。

1)rewrite指令语法结构:rewrite regex replacement [flag]

rewrite使用位置:server{}, location{}, if{}

regex 常用正则表达式说明:

字符

描述

\

将后面接着的字符标记为一个特殊字符或者一个原义字符或一个向后引用

^

匹配输入字符串的起始位置

$

匹配输入字符串的结束位置

*

匹配前面的字符零次或者多次

+

匹配前面字符串一次或者多次

?

匹配前面字符串的零次或者一次

.

匹配除“\n”之外的所有单个字符

(pattern)

匹配括号内pattern并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中的匹配内容,要匹配圆括号字符需要

flag标记说明:

名称

描述

last

重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环,不建议在lation中使用

break

重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用

redirect

临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头,使用相对路径,状态码:302

permanent

重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求,状态码:301

2)if指令语法结构:if (condition) { ... }

引入新的上下文,条件满足时,执行配置块中的配置指令,大括号内的rewrite指令将被执行。if使用位置:server{}, location{}

condition条件说明:

字符

描述

=

判断相等,用于字符比较

!=

不相等

~

模式匹配,区分字符大小写

~*

模式匹配,不区分字符大小写

!~

模式不匹配,区分字符大小写

!~*

模式不匹配,不区分字符大小写

-f -d -e

判断是否为文件、是否为目录、是否存在

3)set指令语法结构:set variable value;

用户自定义变量,变量定义和调用都要以$开头。set使用位置:server{}, location{}, if{}

4)return指令语法结构:return code [text];

停止处理并返回指定响应码给客户。return使用位置:server{}, location{}, if{}

rewrite使用示例:

http {include mime.types;default_type application/octet-stream;log_format myformat '$remote_addr - $remote_user [$time_local] "$request" ';access_log logs/my.log myformat;sendfile on;keepalive_timeout 65;server {listen 8003;server_name www.wf.com;location / {rewrite '^/images/(.*)\.(png|jpg)$' /img?file=$1.$2;set $image_file $1;set $image_type $2;}location /img {root html;try_files /$arg_file /image404.html;}location /image404.html {return 404 "image not found exception";}}
}

如上配置中/images/feixiang.jpg会重写到/img?file=feixiang.jpg,于是匹配到 location /img。然后通过try_files获取存在的文件进行返回,如果文件不存在则直接返回404错误。

表面看rewrite和location功能有点像,都能实现跳转,其主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。很多情况下rewrite也会写在location里,它们的执行顺序是:(1)执行server块的rewrite指令;(2)执行location匹配;(3)执行选定的location中的rewrite指令。如果其中某步URI被重写,则重新循环执行(1)~(3),直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误。

二、浏览器本地缓存配置及动静分离

expires语法: expires 60s|m|h|d

expires使用位置:location{}

expires使用示例:

http {......server {listen 8004;server_name www.wf.com;location / {root html;index index.html index.htm;}location ~ \.(png|jpg|js|css|gif) {root html/images;expires 5m;}}
}

(1)在html目录下创建一个images文件,在该文件中放一张图片

(2)修改index.html, 增加

(3)修改nginx.conf配置,配置两个location实现动静分离,并且在静态文件中增加expires的缓存期限。

三、gzip压缩策略

浏览器请求url,同时声明当前浏览器可以支持压缩类型(gzip、deflate等),服务端会把内容根据浏览器所支持的压缩策略去进行压缩并返回给浏览器,浏览器拿到数据以后进行解码。

gzip使用示例:

http {......server {listen 8004;server_name www.wf.com;gzip on;gzip_buffers 4 16k;gzip_comp_level 7;gzip_min_length 500;gzip_types text/css text/xml application/Javascript;location / {root html;index index.html index.htm;}location ~ \.(png|jpg|js|css|gif) {root html/images;expires 5m;}}
}

gzip语法说明:

语法

描述

gzip on|off

是否开启gzip压缩

gzip_buffers 4 16k

设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。

gzip_comp_level [1-9]

压缩级别,级别越高,压缩越小,但是会占用CPU资源

gzip_disable

正则匹配,表示什么样的浏览器不进行gzip

gzip_min_length

开始压缩的最小长度(小于多少就不做压缩)

gzip_http_version 1.0|1.1

表示开始压缩的http协议版本

gzip_proxied

nginx 做前端代理时启用该选项,表示无论后端服务器的headers头返回什么信息,都无条件启用压缩

gzip_types text/pliain,application/xml

对那些类型的文件做压缩 (类型参考文件conf/mime.conf)

gzip_vary on|off

是否传输gzip压缩标识

gzip使用注意事项:

(1)类似图片和mp3这样的二进制文件,没必要做压缩处理,因为这类文件压缩比很小,压缩过程会耗费CPU资源。

(2)太小的文件没必要压缩,因为压缩以后会增加一些头信息,反而导致文件变大。

(3)Nginx默认只对text/html进行压缩 ,如果要对html之外的内容进行压缩传输,需要我们进行手动配置。


推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
author-avatar
爱心永溢真情永远
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有