引言
本文介绍了使用 openresty 修改 302 重定向地址和参数的方法, 能够应对内外网访问不一致的问题; openresty 集成了 lua 以及众多实用的工具和模板, 比 nginx 还是要方便不少; proxy_redirect 的缺陷是只能修改域名和端口, 不能很好应对复杂情况.
原文地址: http://blog.duhbb.com/2022/02/15/usage-of-openresty-in-rewriting-302-location/
欢迎访问我的博客: http://blog.duhbb.com/
解决的问题
嘿嘿, openresty 真的是神器, YYDS!
以上使用 lua 修改 nginx 302 重定向后的 Location, 使得将 Location 中的内网变成外网访问的地址.
header_filter_by_lua '
local url = ngx.header.Location
if not url then
return
else
local tmp1 = string.gsub(url, "http://192.168.101.78:8080", "http://192.168.101.18:8080")
ngx.header.Location = tmp1
end
';
对应的还有:
body_filter_by_lua
- 获取到所有请求的响应数据
- 对所有请求的响应数据进行敏感信息检测
- 检测到敏感数据返回, 进行脱敏处理后再进行响应
注意:
- 文档中指出 body_filter_by_lua 可能会在一次请求中多次调用
- 当代码运行到 body_filter_by_lua 时,HTTP 报头 (header) 已经发送出去了. 如果在之前设置了跟响应体相关的报头, 而又在 body_filter_by_lua 中修改了响应体, 会导致响应报头和实际响应的不一致. 举个简单的例子: 假设上游的服务器返回了 Content-Length 报头, 而 body_filter_by_lua 又修改了响应体的实际大小. 客户端收到这个报头后, 如果按其中的 Content-Length 去处理, 那他就掉坑里了. 由于 Nginx 的流式响应, 发出去的报头就像泼出去的水, 要想修改只能提前进行.OpenResty 提供了跟 body_filter_by_lua 相对应的 header_filter_by_lua.
参考文档
- https://blog.csdn.net/weixin_33734785/article/details/89124813
- https://blog.csdn.net/ygm_linux/article/details/81563129
- https://blog.csdn.net/wtswjtu/article/details/38898945
- https://zhuanlan.zhihu.com/p/67904411
结束语
本文介绍了使用 openresty 修改 302 重定向地址和参数的方法, 能够应对内外网访问不一致的问题; openresty 集成了 lua 以及众多实用的工具和模板, 比 nginx 还是要方便不少; proxy_redirect 的缺陷是只能修改域名和端口, 不能很好应对复杂情况.
原文地址: http://blog.duhbb.com/2022/02/15/usage-of-openresty-in-rewriting-302-location/
欢迎访问我的博客: http://blog.duhbb.com/
本文链接地址:openresty改写302的Location,英雄不问来路,转载请注明出处,谢谢。
有话想说:那就赶紧去给我留言吧。
文章评论