首页 > 系统相关 >[nginx]lua控制请求头

[nginx]lua控制请求头

时间:2023-05-28 10:23:01浏览次数:37  
标签:请求 header lua req nginx ngx name

前言

nginx原生提供expiresadd_header两个指令控制请求头,在Lua API中也有类似的指令。

添加请求头

  • 指令:ngx.req.set_header
  • 语法:ngx.req.set_header(header_name, header_value)
  • 环境:set_by_lua*rewrite_by_lua*access_by_lua*content_by_lua*header_filter_by_lua*body_filter_by_lua*
  • 含义:添加或修改当前HTTP的请求头。如果请求头已经存在,则会被替换成新的值。通过此方式设置的请求头会被继承到子请求中。
  • 示例
-- 设置一个名为Test_Ngx_Ver、值为 1.21.4 的请求头
ngx.req.set_header("Test_Ngx_Ver", "1.21.4")
-- 同一个请求头设置多个值,用数组的方式添加
ngx.req.set_header("Test", {"1","2"})

清除请求头

  • 指令:ngx.req.clear_header
  • 语法:ngx.req.clear_header(header_name)
  • 环境:set_by_lua*rewrite_by_lua*access_by_lua*content_by_lua*header_filter_by_lua*body_filter_by_lua*
  • 含义:清除当前请求中指定的请求头。清除后,如果存在未执行的子请求,则子请求会继承清除后的请求头
  • 示例
ngx.req.clear_header("Test_Ngx_Ver")

获取请求头

  • 指令:ngx.req.get_headers
  • 语法:headers = ngx.req.get_headers(max_headers?,raw?)
  • 环境:set_by_lua*rewrite_by_lua*access_by_lua*content_by_lua*header_filter_by_lua*body_filter_by_lua*log_by_lua*
  • 含义:获取当前请求的全部请求头,并返回一个Lua的Table类型的数据
  • 示例
server {
	listen       8000;
	server_name  localhost;

	#charset koi8-r;

	#access_log  logs/host.access.log  main;
	location ~ ^/([a-z]+)/test {
		default_type 'text/plain';

		content_by_lua_block {
			local ngx = require "ngx";
			local h = ngx.req.get_headers()
			for k,v in pairs(h) do
				ngx.say('Header name: ',k,' value: ',v)
			end
		}
		# 指定header
		# ngx.say(h["host"])
	}
}

综合示例

location = /testlua {
	access_by_lua_block {
		ngx.req.set_header("version",'1.0')
	}
	content_by_lua_block {
		local h = ngx.req.get_headers()
		for k,v in pairs(h) do
			ngx.say(string.format("header name: %s, value: %s",k,v))
		end
		ngx.say(h["host"])
	}
}

使用curl测试

curl -i http://192.168.0.10/testlua

HTTP/1.0 200
server: openresty
date: Thu, 25 May 2023 16:25:43 GMT
content-type: application/octet-stream
strict-transport-security: max-age=31536000; includeSubDomains; preload
x-frame-options: DENY
x-xss-protection: 1; mode=block
x-content-type-options: nosniff

header name: user-agent, value: curl/7.81.0
header name: accept, value: */*
header name: host, value: rainux.cn
header name: version, value: 1.0
192.168.0.10

参考

  • 《Nginx实战: 基于Lua语言的配置、开发与架构详解》

标签:请求,header,lua,req,nginx,ngx,name
From: https://www.cnblogs.com/XY-Heruo/p/17437851.html

相关文章

  • Nginx编译安装2
    1.进入安装目录:#cd/usr/local/src 2、下载nginx源码文件nginx网址:http://nginx.org/en/download.html 3、复制文件下载地址:http://nginx.org/download/nginx-1.22.1.tar.gz4、开始下载:#wgethttp://nginx.org/download/nginx-1.22.1.tar.gz5、解压#tar-zxvf......
  • nvim中packer.lua的设置
    Manu`swebsite|ConfigureNvimwithLua:Plugin/packagemanagement(3)(manujsdev.com)localensure_packer=function()localfn=vim.fnlocalinstall_path=fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'iffn.empt......
  • Nginx配置Basic_Auth登录认证
    一般来说,僵尸网络的扫描行为都是全互联网大范围进行的,并且所探测的漏洞大多都是一些新爆发的cms漏洞(ThinkPHP)、或者是一些常见的框架组件漏洞(如Struts2),针对该特性,我们可以配置BasicAuth登录认证(ngx_http_auth_basic_module),来减少僵尸网络对我们web服务的侵扰。注:BasicAuth......
  • nginx代理给网关时 丢失请求的host信息问题
    nginx搭建域名访问环境描述:访问gulimall.com,Nginx反向代理到网关地址,然后网关转发到具体的product服务域名映射的效果如下:具体步骤:(1)hosts文件配置域名和ip映射修改windows下host文件:C:\Windows\System32\drivers\etc\hosts为了方便,可以使用SwitchHost工具(2)配置nginx......
  • 配置类统一处理请求跨域
    跨域处理跨域:浏览器对于javascript的同源策略的限制。以下情况都属于跨域:跨域原因说明示例域名不同www.jd.com与www.taobao.com域名相同,端口不同www.jd.com:8080与www.jd.com:8081二级域名不同item.jd.com与miaosha.jd.com如果域......
  • ASP.NET MVC WebAPI Put和Delete请求出现405(Method not allowed)错误
    解决办法:在站点根目录下的web.config设置如下(主要参考添加项):<system.webServer></system.webServer>(End)转自:https://www.bbsmax.com/A/qVdepEM85P/......
  • SpringMVC —— 关于获取请求参数的注解
    1、@RequestParam的3个作用?①起别名②设置默认值③给list集合赋值2、@RequestParam、@RequestBody、@PathVariable分别用于获取什么样格式的请求数据??号传值的参数json对象格式参数路径传值参数......
  • jmeter之JDBC Connection Configuration 请求
    1、下载mysqljdbc驱动包(注:驱动包的版本一定要与你数据库的版本匹配,驱动版本低于mysql版本有可能会导致连接失败报错)我这里下载的是mysql-connector-j-8.0.33.jar下载完后,将jira包放在D:\jmeter\apache-jmeter-5.2.1\lib目录下,这样就jmeter中就有驱动了,重启jmeter  2.线程......
  • 5、基于 request cache 请求缓存技术
    Hystrixcommand执行时8大步骤第三步,就是检查Requestcache是否有缓存。首先,有一个概念,叫做RequestContext请求上下文,一般来说,在一个web应用中,如果我们用到了Hystrix,我们会在一个filter里面,对每一个请求都施加一个请求上下文。就是说,每一次请求,就是一次请求上下文......
  • nginx 配置中的sendfile 的作用
    http{...sendfileon...}sendfile配置的具体意思:设置为on表示,使用零拷贝技术来传输文件:sendfile,这样只需要2次上下文切换,和2次数据拷贝。设置为off表示,使用传统的文件传输技术:read+write,这时就需要4次上下文切换,和4次数据拷贝。当然,要使用sendfil......