openresty使用lua拦截proxy_pass重定向301 302_lua proxy_pass_BlueSky_x的博客-程序员秘密

技术标签: nginx  LUA  

前言:

在使用nginx proxy_pass后端资源时候,有时候后端会返回301、302、304重定向,这样导致用户等浏览器直接访问来最终的等资源,无法经过nginx proxy_pass,这种时候nginx代理就没有意义了。openresty集成了lua,通过lua可以在nginx返回客户端的时候,修改包头,改写重定向规则,即可处理重定向问题

  302示例,访问资源一个资源:正常nginx配置如下,此时无法处理重定向

server{
   listen 1222;
   server_name 192.168.160.10;
   location / {
         proxy_set_header Host $proxy_host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header User-Agent $http_user_agent;
         proxy_set_header SSL '1';
         proxy_set_header Upgrade $http_upgrade;
         proxy_http_version 1.1;
         proxy_set_header Connection "upgrade";
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_pass http://192.168.128.89:80;
   }
}

可以看到,当访问http://192.168.160.10:1222时候,服务器返回的 status code是302,Location: http://192.168.128.89/users/sign_in,此时会浏览器重定向到新的目录

 

此时通过lua修改302response的包头Location字段,如下:

server{
   listen 1222;
   server_name 192.168.160.10;
   location / {
         proxy_set_header Host $proxy_host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header User-Agent $http_user_agent;
         proxy_set_header SSL '1';
         proxy_set_header Upgrade $http_upgrade;
         proxy_http_version 1.1;
         proxy_set_header Connection "upgrade";
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;

         # header_filter可以处理请求和响应的HTTP header
         header_filter_by_lua_block {
           -- 修改重定向的Location地址,为proxy_pass的地址 
           if ngx.header.Location ~= nil then
                local resetLocation = string.gsub(ngx.header.Location,"http://192.168.128.89","http://192.168.160.10:1222")
                ngx.header.Location = resetLocation
           end
         }
         proxy_pass http://192.168.128.89:80;
   }
}

效果如下:

此时虽然返回的是301,但location IP地址是nginx listen的地址,后续的请求依旧会来来到nginx。

纯nginx处理重定向

此方法需要给nginx添加openresty-headers-more-nginx-module拓展模块

more_set_headers -s '301 302' 'Location http://xxx.com:1233$uri/';

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/XuHang666/article/details/105701489

智能推荐

linux环境下的swp文件_qq_41072096的博客-程序员秘密

swp文件代表了交换文件,用于保存临时数据,swp文件是隐藏文件,可以用la查看。以.开头的都是隐藏文件。非正常关闭vi/vim编辑器时会生成一个.swp文件关于swp文件使用vi/vim,经常可以看到swp这个文件,那这个文件是怎么产生的呢,当你打开一个文件,vi就会生成这么一个.(filename)swp文件 以备不测(不测下面讨论),如果你正常退出,那么这个这个swp文件将会自动删除 ...

html table 个人简历demo_qml666的博客-程序员秘密

个人简历 个人简历 个人资料 姓 名: 婚姻状况: 照片 出 生: 政治面貌:

java web前端模版,以Eclipse替核心搭建JAVA WEB开发环境(三)-模板项目Archetype_weixin_39922929的博客-程序员秘密

以Eclipse为核心搭建JAVA WEB开发环境(三)-模板项目Archetype本篇介绍创建archetype,用于创建WEB项目的模板。1、创建一个Dynamic Web Project。自己设置好项目的build path。2、添加Maven配置。右键点击项目,选择Configure-->Convert to Maven Project输入Group Id和Articfact Id3...

Servlet-学习笔记_LvManBa的博客-程序员秘密

Servlet-授课一、 Servlet1.1 Servlet概述Servlet是SUN公司提供的一套规范,名称就叫Servlet规范,它也是JavaEE规范之一。我们可以像学习Java基础一样,通过API来学习Servlet。这里需要注意的是,在我们之前JDK的API中是没有Servlet规范的相关内容,需要使用JavaEE的API。目前在Oracle官网中的最新版本是JavaEE8,该网址中介绍了JavaEE8的一些新特性。当然,我们可以通过访问官方API,学习和查阅里面的内容。打开官方API网

IIS安装SSL证书,谷歌浏览器无法访问,err_connection_closed,err_connection_reset_err_connection_closed谷歌_追风筝的摆渡人的博客-程序员秘密

1.问题描述1.阿里云服务器,根据官网教程,IIS上安装SSL证书,输入https://XXX域名,结果谷歌浏览器出现如下错误,然而IE浏览器却能正常访问。2.我用Nginx发布,谷歌浏览器却可以访问,问题应该出在IIS。2.解决添加链接描述借助该文档成功解决!...

随便推点

RFID工具管理系统几大应用场景_RFID-整体解决方案的博客-程序员秘密

  RFID工具管理系统几大应用场景,RFID工具管理系统应用场景主要有哪些?RFID工具管理系统可以科学管理各种工具,使用RFID抗金属标签与工具绑定,可进行领取、归还、查找和维护工具等管理,提高借还工具效率,提高工具管理的准确性和高效性,落实责任人。RFID工具管理系统几大应用场景  RFID工具管理系统应用场景主要有:  一、铁路线路维护工具管理,铁路线路维护的工具种类多,规格相差大,使用场合分散,一直是管理的难点,在每个工具安装RFID电子标签后,可以在库房的门口安装RFID超高频读写

求解最大公约数的算法比较_原力甦醒的博客-程序员秘密

**第一章 程序的算法设计**一、题目要求运行最大公约数的常用算法,并进行程序的调试与测试,要求程序设计风格良好,并添加异常处理模块(如输入非法等)。二、算法构造程序的思路大致为:(1)利用随机函数rand()随机生成[1,100]的数;(3)用户根据提供的6种算法选择输入算法的序号即可执行该算法;(4)计算...

java.io.file修改名称_关于apache的commons-io源码包中FilenameUtils文件名称工具类对文件名称标准化、系统路径转换等操作源码说明..._偃鼠的博客-程序员秘密

一、前言关于apache的commons-io源码包org.apache.commons.io.FilenameUtils文件名称操作工具类,进行操作系统判断isSystemWindows、文件名称标准化normalize处理、不同操作系统unix路径转换separatorsToUnix、通过文件名判断相当equals/equalsOnSystem/equalsNormalized/equalsN...

ios的内购功能_ios 内购测试证书_nslog1234554321的博客-程序员秘密

iOS开发内购详细版本说明 优雅地小男子 关注2017.02.23 11:08* 字数 877 阅读 8023评论 46喜欢 26一、最近公司很多的项目用到了内购,抽空整理下内购的详细内容吧。1、先从内购的iTunesConnect里配置说起吧,我们先进入苹果的iTunesConnect链接https://itunesconnect.appl

求各入度(邻接表)_邻接表计算入度_haibianyoushark的博客-程序员秘密

Problem Description设有一有向图,其顶点值为字符型并假设各值互不相等,采用邻接表表示法存储表示。设计一个算法,求该图中所有顶点的入度值(要求按顶点的存储顺序输出)。 Input有多组测试数据,每组数据的第一行表示图的顶点数n和图的边数e(0<n<30);第二行表示各顶点的值,按输入顺序进行存储;接下来有e行,每一行表示每条边所依附的顶点的存储下标i和j,两...

推荐文章

热门文章

相关标签