[nginx]lua控制请求头
前言
nginx原生提供expires
、add_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语言的配置、开发与架构详解》
本文来自博客园,作者:花酒锄作田,转载请注明原文链接:https://www.cnblogs.com/XY-Heruo/p/17437851.html