[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语言的配置、开发与架构详解》
[nginx]lua控制请求头的更多相关文章
- HTTP 请求头中的 X-Forwarded-For(转)
原文:https://imququ.com/post/x-forwarded-for-header-in-http.html 我一直认为,对于从事 Web 前端开发的同学来说,HTTP 协议以及其他常 ...
- NGINX + LUA实现复杂的控制 --源自http://outofmemory.cn/code-snippet/14396/nginx-and-lua
安装lua_nginx_module 模块 lua_nginx_module 可以一步步的安装,也可以直接用淘宝的OpenResty Centos和debian的安装就简单了.. 这里说下freebs ...
- NGINX + LUA实现复杂的控制
安装lua_nginx_module 模块 lua_nginx_module 可以一步步的安装,也可以直接用淘宝的OpenResty Centos和debian的安装就简单了.. 这里说下freebs ...
- 安装nginx并配置nginxscript(njs)实现请求头验证或者分流
本文以centos为例 nginx+nginxscript 源码安装nginx 安装必要环境 安装gcc环境 sudo yum -y install gcc gcc-c++ 安装 pcre,让ngin ...
- Nginx+Lua+Redis 对请求进行限制
Nginx+Lua+Redis 对请求进行限制 一.概述 需求:所有访问/myapi/**的请求必须是POST请求,而且根据请求参数过滤不符合规则的非法请求(黑名单), 这些请求一律不转发到后端服务器 ...
- nginx log记录请求的头信息
记录访问的log,为了在出现特殊情况时,方便检查出现问题的地方.log_format accesslog ‘$remote_addr – $remote_user [$time_local] “$re ...
- nginx代理 (带着请求头)
当你获得云服务器之后, 你有这样一个需求:当你要访问一个url的时候,这个URL只能在人家的云服务器上访问(比如百度),所以你要买百度的BCC,你可能在想在BCC起服务,那样有点麻烦,直接使用ngin ...
- 解决通过Nginx转发的服务请求头header中含有下划线的key,其值取不到的问题
1. 问题 由于在http请求头的头部中设置了一些自定义字段,刚好这些字段中含有下划线,比如bundle_name这种,后端在进去获取头部信息时,发现取不到对应的值 2. 原因及解决办法 分析 首先看 ...
- nginx限制请求之三:Nginx+Lua+Redis 对请求进行限制
相关文章: <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <n ...
- nginx 获取请求头,URL参数
获取url参数 在 ngx_lua 中访问 Nginx 内置变量 ngx.var.arg_PARAMETER 即可获得GET参数PARAMETER的内容. 在 nginx配置中,通过$arg_PARA ...
随机推荐
- HTML中meta标签的那些属性
<meta> 标签是 HTML 中用于描述网页元信息的元素.它位于 <head> 部分,不会显示在页面内容中,但对于浏览器.搜索引擎等具有重要作用.主要作用有:定义文档的字符编 ...
- #Python基础 DateFrame 查看数据信息
一:导入案例数据及X-MIND 二:实例 2.1 显示摘要信息 2.2显示描述性统计信息 2.3显示 前后n行 2.4显示索引.列信息 2.5显示每列的数据类型
- Java设计模式简介(总结)
Java设计模式简介(总结) 什么是设计模式 Java设计模式是一组经过验证的解决特定问题的编程技术,这些技术可以帮助开发人员快速.有效地开发高质量的软件.使用设计模式是为了可重用代码.让代码更容易被 ...
- AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from
函数里面return response问题: 1.没有 2.写错 3.位置错 例如: return Response('确认成功')
- AcWing 3956. 截断数组
给定一个长度为 n 的数组 a1,a2,-,an. 现在,要将该数组从中间截断,得到三个非空子数组. 要求,三个子数组内各元素之和都相等. 请问,共有多少种不同的截断方法? 输入格式 第一行包含整数 ...
- Windows 11 和 Rocky 9 Linux 平台 MySQL 8.0.33 简易安装教程
目录 Windows 平台安装 MySQL Linux 平台 Rocky 9 安装 MySQL binary package rpm package yum 源 source package Wind ...
- SQL注入原理及利用方式
前言 在Web表单递交或输入域名或页面请求的查询字符串,通过后端语言连接数据库并查询数据,攻击者可利用此漏洞拼接恶意语句获取大量数据. SQL注入漏洞 在表单页面或者存在参数传递的地方可能存在SQL注 ...
- MassTransit实现Saga模式概览
原文地址:Saga Overview 编排一系列事件的能力是一个强大的功能,而MassTransit使这成为可能. saga是由协调器管理的长期事务.saga是由事件发起的,saga编排事件,saga ...
- 烂怂if-else代码优化方案
0.问题概述 代码可读性是衡量代码质量的重要标准,可读性也是可维护性.可扩展性的保证,因为代码是连接程序员和机器的中间桥梁,要对双边友好.Quora 上有一个帖子: "What are so ...
- 如何安装旧版本的 R 包
由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 我们在安装 R 包的时候,经常会发现某个最新的包与当前 R 的版本不兼容. > inst ...