首页 > 系统相关 >[nginx]lua控制响应头

[nginx]lua控制响应头

时间:2023-05-29 11:57:50浏览次数:37  
标签:name header lua content nginx ngx 响应

前言

适用场景:添加CDN缓存时间、操作set-cookie、标记业务数据类型等。

获取响应头

  • 指令:ngx.resp.get_headers
  • 语法:headers = ngx.resp.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*balancer_by_lua*
  • 含义:读取当前请求的响应头,并返回一个lua的table类型的数据
  • 示例
server {
	# ...
	location /testlua {
        content_by_lua_block {
            local ngx = require "ngx";
            local h = ngx.resp.get_headers()
            for k,v in pairs(h) do
                ngx.say(string.format("Header name: %s, value: %s",k,v))
            end
            -- 从table中读取指定响应头的值
            ngx.say(h["connection"])
        }
    }
}

请求测试:

curl -i http://192.168.0.10/testlua

修改响应头

  • 指令:ngx.header.HEADER
  • 语法:ngx.header.HEADER = VALUE
  • 环境:rewrite_by_lua*access_by_lua*content_by_lua*header_filter_by_lua*body_filter_by_lua*log_by_lua*balancer_by_lua*
  • 含义:对响应头进行修改、清除、添加等操作。(输出响应头时,默认会将“_”替换为"-")
  • 示例
localtion /testlua {
	content_by_lua_block {
		local ngx = require "ngx";
		ngx.header.myrespheader = "helloworld"
		ngx.header.content_type = 'test/plain'
		ngx.header.second_header = "hellonginx" -- 下划线会变成中划线
		ngx.header["third_header"] = "hellolua" -- 等同于 ngx.header.third_header = "hellolua"
		ngx.header["forth_header"] = {"test10=10;env=10","test11=11;env=11"} -- 一个响应头里面设置两个值
		local h = ngx.resp.get_headers() -- 读取响应头
		for k,v in pairs(h) do
			ngx.say(string.format("Header name: %s, value: %s",k,v))
		end
	}
}

请求测试:

curl -i http://192.168.0.10/testlua

HTTP/2 200
server: openresty
date: Sun, 28 May 2023 02:39:26 GMT
content-type: test/plain
myrespheader: helloworld
second-header: hellonginx
third-header: hellolua

Header name: second-header, value: hellonginx
Header name: third-header, value: hellolua
Header name: myrespheader, value: helloworld
Header name: content-type, value: test/plain
Header name: connection, value: close

删除响应头

如果要删除一个响应头,将其赋值为 nil 即可,例如:

ngx.header["second_header"] = nil

参考

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

标签:name,header,lua,content,nginx,ngx,响应
From: https://www.cnblogs.com/XY-Heruo/p/17440036.html

相关文章

  • Nginx 如何预防网络爬虫?
    网络爬虫是一种自动获取网页信息并进行处理的程序。爬虫通过访问指定的URL地址,对返回的HTML或其他类型响应数据进行解析、提取所需的数据或信息,并存储到本地或其他指定位置。通常可以用于搜索引擎的抓取、数据挖掘、信息聚合等领域。为了预防网络爬虫,Nginx可以采取以下措施......
  • nginx,gateway配置
    反向代理:监听192.168.10.129:9001如果url中有edu就把请求转发给http://ip1:port1,如果url中有vod就把请求转发给http://ip2:port2nginx配置:server{listen9001;server_name192.168.10.129;location~/edu/{proxy_passhttp://ip1:port1}location~/vod/{proxy_passhtt......
  • 页面各种布局概念与区别--静态布局、自适应布局、流式布局、响应式布局、弹性布局等
    @目录静态布局(StaticLayout)流式布局(LiquidLayout)自适应布局(AdaptiveLayout)响应式布局(ResponsiveLayout)响应式布局,自适应布局,流式布局总结和比较弹性布局(rem/em布局)响应式和弹性布局之间的对比总结静态布局(StaticLayout)即传统Web设计,网页上的所有元素的尺寸一律使用px作为......
  • Lua安装及基本语法
    lua的安装1安装luawgethttp://luajit.org/download/LuaJIT-2.0.5.tar.gztar-zxvfLuaJIT-2.0.5.tar.gzcdLuaJIT-2.0.5make&&makeinstallPREFIX=/usr/local/LuaJIT2配置环境变量vim/etc/profileexportLUAJIT_LIB=/usr/local/LuaJIT/......
  • windows nginx.bat cmd 命令脚本,方便windows开发
    @echooffsetROOT=C:\Users\38524\bin\nginx-1.25.0echoyounginxrootpathis:%ROOT%setCMD=%ROOT%\nginx.exeechoyounginxcmdpathis:%CMD%setCONF=%ROOT%\conf\nginx.confechoyounginxconfpathis:%CONF%^@REMforstart@REMecho......
  • CentOS 9 安装 Nginx 模块 `subs_filter`
    sub_filter和subs_filter区别sub_filter(0.7.24):替换响应体(ResponseBody)中的文本,只能设置一组替换。subs_filter:替换响应体(ResponseBody)和响应头(ResponseHeaders)中的文本,可以设置多组替换。sub_filter使用案例:http{server{listen80;server_n......
  • CentOS 9 安装 Nginx 模块 `subs_filter`
    sub_filter和subs_filter区别sub_filter(0.7.24):替换响应体(ResponseBody)中的文本,只能设置一组替换。subs_filter:替换响应体(ResponseBody)和响应头(ResponseHeaders)中的文本,可以设置多组替换。sub_filter使用案例:http{server{listen80;server_......
  • [nginx]lua控制请求头
    前言nginx原生提供expires、add_header两个指令控制请求头,在LuaAPI中也有类似的指令。添加请求头指令: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*、b......
  • 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......