openresty改写302的Location

2022年 2月 15日 104点热度 0人点赞 0条评论

引言

本文介绍了使用 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/

解决的问题

file

嘿嘿, openresty 真的是神器, YYDS!

file

以上使用 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.

参考文档

结束语

本文介绍了使用 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/

本文来自:https://blog.duhbb.com

本文链接地址:openresty改写302的Location,英雄不问来路,转载请注明出处,谢谢。

有话想说:那就赶紧去给我留言吧。

rainbow

这个人很懒,什么都没留下

文章评论