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

re模块常用修饰符_nginx常见模块headersmore,setmisc

nginx–常见模块,headers-more-nginxandset-misc-nginx等nginxmodule:headers-more-nginxinstallandove

nginx–常见模块,headers-more-nginx and set-misc-nginx 等

nginx module : headers-more-nginx

install and overview

ngx_http_headers_module是在Nginx编译时默认自带的模块,主要包含add_header和expires两个指令。之前有专门的文档介绍过该模板的配置与使用;文章链接: https://blog.csdn.net/LL845876425/article/details/102773194

而ngx_http_headers_module 的2个主要指令(add_header, expires) 中的add_header指令,只适合用来添加响应头,如需对HTTP请求头进行处理,可以使用第三方模块headers-more-nginx,它可以用来添加、删除、修改HTTP请求头和响应头。该模块地址为https://github.com/openresty/headers-more-nginx-module.git,其安装方式如下:

2c96addd40001960b1c5d448fb995cfd.png

[root@network-test nginx]# lltotal 1036drwxr-xr-x 6 root root 4096 Aug 24 10:59 headers-more-nginx-module-rw-r--r-- 1 root root 1048727 Aug 11 23:03 nginx-1.19.2.tar.gz[root@network-test nginx]# # git clone https://github.com/openresty/headers-more-nginx-module.git[root@network-test nginx]# # wget http://nginx.org/download/nginx-1.19.2.tar.gz[root@network-test nginx]# [root@network-test nginx]# tar -xf nginx-1.19.2.tar.gz[root@network-test nginx]# cd nginx-1.19.2/[root@network-test nginx-1.19.2]# ./configure --prefix=/usr/local/nginx --add-module=../headers-more-nginx-module[root@network-test nginx-1.19.2]# make && make install

安装完成后,对其进行配置,让它实现和add_header指令一样的功能。

实例1:

more_set_headers 'Cache-Control : 1000';# 上述配置等同于add_header Cache-Control 1000 always; # 作用是无论返回的状态码是什么都会输出响应头。

初始header;

3c8ac8094ae1fb26c512c6830a790df8.png

添加nginx 配置 more_set_headers 'Cache-Control : 1000';

752618877e3d62019533b95b6abf9f12.png

验证已经添加成功:

4dbc54605e3b282639d2b01e26dc0a0e.png

实例2:

more_set_headers -s '200 301' 'Cache-Control:1000';

上述配置等同于add_header Cache-Control 1000;,表示当状态码是200或301时才输出响应头,从而加强对响应头的控制。

当后端服务器返回的响应头和使用more_set_headers指令时相同时,响应头的值会被more_set_headers替换掉,这样就不会同时出现两个相同的响应头了。

headers-more-nginx模块常用的操作指令还有很多,例如more_set_headers、more_clear_headers、more_set_input_headers、more_clear_input_headers等。

70149fb2bee0cda64b125c4070dcf57b.png
b881136e5e994f15c5a1ffc208906362.png

Detail

1.根据HTTP状态控制响应头

指令:more_set_headers

语法:more_set_headers [-t ] … [ -s ]……

默认值:无

环境:http、server、location、location if

执行阶段:output-header-filter

示例:more_set_headers -s 404 -s ‘500 502’ ‘Result:error’ ‘F:X-re’;

含义:在返回响应报文前对响应头进行新增或替换操作。

示例的意思是当响应状态码(-s参数的作用就是匹配对应的状态码)是404、500或502时,如果添加’Result:error’和’F:X-re’两个响应头,当后端服务器返回其中任何一个响应头时,more_set_headers都会替换返回的值。

more_set_headers -s 404 -s '500 502' 'Result:error' 'F:X-re';

06528411407d260e58844a64aa9eb3f1.png

2.根据HTTP状态清除响应头

指令:more_clear_headers

语法:more_clear_headers [-t ]…[-s ]……

默认值:无

环境:http、server、location、location if

执行阶段:output-header-filter

示例:more_clear_headers -s 200 -t ‘text/plain’ F Result;

含义:在返回响应报文前清除指定的响应头。

more_clear_headers -s 200 -t 'text/plain' F Result;more_clear_headers -s 200 -t 'X-*';

示例中的意思是当响应状态码是200时清除’text/plain’、F、Result这3个响应头;如果不用-s参数(即不对状态码进行匹配),指定的响应头在任何状态码下都会被清除。 该指令还可以使用通配符,例如,想要清除以X-开头的响应头,只需使用more_clear_headers -s 200 -t 'X-*'即可。

3.设置HTTP请求头

指令:more_set_input_headers

语法:more_set_input_headers ‘Host:testnginx.com’;

环境:http、server、location、location if

执行阶段:rewritetail

含义:当请求在rewrite阶段并执行到最后时,再添加一个请求头,该请求头将和请求一起到达下一个阶段;

示例如下:

22bbbf3375a9bd305893564947a23c47.png

4.清除HTTP请求头

指令:more_clear_input_headers

语法:more_clear_input_headers -t Cache-Control;

环境:http、server、location、location if

执行阶段:rewrite tail

含义:当请求在rewrite阶段并执行到最后时,如果匹配到的请求头是CacheControl就清除掉。

该指令支持通配符,如“more_clear_input_headers ‘Test*’;”,指的就是以Test开头的请求头将全部被清除。

more_clear_input_headers 'Test*';

  • 关于指令more_clear_headers清除响应头操作可以用来隐藏服务内部的一些敏感信息,如varnish自带的响应头,或者PHP框架生成的响应头等。在实际业务中首先要确定需要传递给客户端的响应头信息,而不必传递给客户端的信息则可以使用此方法进行清除。
  • 关于指令more_set_input_headers和more_clear_input_headers ; 这两个指令都在 rewrite tail阶段使用,如果在同一个执行阶段使用这两个指令,会按照指令的前后顺序执行。
  • headers-more-nginx模块的指令都是区分大小写的,所以要注意区分字母的大小写。

5.实战经验

  • 关于指令more_clear_headers清除响应头操作可以用来隐藏服务内部的一些敏感信息,如varnish自带的响应头,或者PHP框架生成的响应头等。在实际业务中首先要确定需要传递给客户端的响应头信息,而不必传递给客户端的信息则可以使用此方法进行清除。
  • 关于指令more_set_input_headers和more_clear_input_headers ; 这两个指令都在 rewrite tail阶段使用,如果在同一个执行阶段使用这两个指令,会按照指令的前后顺序执行。
  • headers-more-nginx模块的指令都是区分大小写的,所以要注意区分字母的大小写。

nginx module : set-misc-nginx

第三方模块set-misc-nginx在rewrite阶段使用,它功能丰富,具有设置变量、URL转义、生成随机数、防止SQL注入、解码与编码等多项功能。

install and overview

该模块地址为https://github.com/openresty/set-misc-nginx-module.git

安装时直接编译即可,如下所示:

1ee8330f4e8c815a3cc635919d39dde6.png

git clone https://github.com/openresty/set-misc-nginx-module.gitgit clone https://github.com/vision5/ngx_devel_kit.gitcd nginx-1.19.2/./configure --prefix=/usr/local/nginx --add-module=../ngx_devel_kit --add-module=../set-misc-nginx-modulemake && make install

a5084166884957dfb8f86055f64d3939.png

注意:很多第三方模块在编译时都需要加入ngx_devel_kit模块,因为ngx_devel_kit扩展了Nginx服务器的核心功能,很多第三方模块都是基于它实现的。

8ca233360647269ce2d438a5fce58742.png

如果不使用此模块,而直接用Nginx进行配置会比较麻烦。

下面的其他功能指令由于使用的机会不会很多;尽做展示;需要时实际再查即可;

2、防止SQL注入

指令:set_quote_sql_str

3、字符串非转义和转义

指令:set_unescape_uri

4、基于键值的集群分片

Nginx通过第三方模块可以和数据库进行交互,这使API 服务更容易部署和开发。当需要对数据库中的数据分片读取时,可以使用指令set_hashed_upstream进行配置。

指令:set_hashed_upstream

5、base编码

指令:set_encode_base32

6、md5编码

指令:set_md5

7、生成随机数

指令:set_random

指令:set_secure_random_alphanum

指令:set_secure_random_lcalpha

8、本地时间的输出

指令:set_local_today

9、实战经验

  • 关于指令set_if_empty要尽量减少if语句的使用,而且使用set_if_empty能够提升Nginx的可读性。
  • 关于指令set_quote_sql_str一旦让Nginx和数据库直接交互,要确保set_quote_sql_str指令的存在,以防止SQL注入。
  • 关于指令set_unescape_uri和set_escape_uri在处理数据时,如URL,需要确保转义和非转义的统一性,避免出现前面的代码做了转义,但后面的某些环节却使用非转义数据的情况,因为这样会导致在匹配和对比时出现数据不一致的情况。
  • 关于指令set_hashed_upstream该类型的分片比较简单,不涉及高可用。如果某个upstream服务全部“挂掉”,则会报错。因此,在设计分片时要考虑足够多的可能性。

nginx module : ngx_http_image_filter_module

install and overview

Nginx可以使用ngx_http_image_filter_module对图片进行切割裁剪,这为动态处理图片提供了支持。

安装方式:只需在编译Nginx时,添加--with-http_image_filter_module即可。

依赖库:libgd(gddevel),在CentOS系统下通过yum安装即可(推荐使用最新版本)。

具体的使用;在有需要时,可以查阅对应官网说明和使用手册;



推荐阅读
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • .NetCoreWebApi生成Swagger接口文档的使用方法
    本文介绍了使用.NetCoreWebApi生成Swagger接口文档的方法,并详细说明了Swagger的定义和功能。通过使用Swagger,可以实现接口和服务的可视化,方便测试人员进行接口测试。同时,还提供了Github链接和具体的步骤,包括创建WebApi工程、引入swagger的包、配置XML文档文件和跨域处理。通过本文,读者可以了解到如何使用Swagger生成接口文档,并加深对Swagger的理解。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • PatchODAX8: ... [详细]
  • 1.利用node实现页面实时更新,主要 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 学习笔记(34):第三阶段4.2.6:SpringCloud Config配置中心的应用与原理第三阶段4.2.6SpringCloud Config配置中心的应用与原理
    立即学习:https:edu.csdn.netcourseplay29983432482?utm_sourceblogtoedu配置中心得核心逻辑springcloudconfi ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
author-avatar
zxcvbnm89
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有