在使用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添加openresty-headers-more-nginx-module拓展模块
more_set_headers -s '301 302' 'Location http://xxx.com:1233$uri/';
解决错误:java.lang.NoClassDefFoundError: net/sf/jsqlparser/expression/Expression
swp文件代表了交换文件,用于保存临时数据,swp文件是隐藏文件,可以用la查看。以.开头的都是隐藏文件。非正常关闭vi/vim编辑器时会生成一个.swp文件关于swp文件使用vi/vim,经常可以看到swp这个文件,那这个文件是怎么产生的呢,当你打开一个文件,vi就会生成这么一个.(filename)swp文件 以备不测(不测下面讨论),如果你正常退出,那么这个这个swp文件将会自动删除 ...
个人简历 个人简历 个人资料 姓 名: 婚姻状况: 照片 出 生: 政治面貌:
以Eclipse为核心搭建JAVA WEB开发环境(三)-模板项目Archetype本篇介绍创建archetype,用于创建WEB项目的模板。1、创建一个Dynamic Web Project。自己设置好项目的build path。2、添加Maven配置。右键点击项目,选择Configure-->Convert to Maven Project输入Group Id和Articfact Id3...
Servlet-授课一、 Servlet1.1 Servlet概述Servlet是SUN公司提供的一套规范,名称就叫Servlet规范,它也是JavaEE规范之一。我们可以像学习Java基础一样,通过API来学习Servlet。这里需要注意的是,在我们之前JDK的API中是没有Servlet规范的相关内容,需要使用JavaEE的API。目前在Oracle官网中的最新版本是JavaEE8,该网址中介绍了JavaEE8的一些新特性。当然,我们可以通过访问官方API,学习和查阅里面的内容。打开官方API网
1.问题描述1.阿里云服务器,根据官网教程,IIS上安装SSL证书,输入https://XXX域名,结果谷歌浏览器出现如下错误,然而IE浏览器却能正常访问。2.我用Nginx发布,谷歌浏览器却可以访问,问题应该出在IIS。2.解决添加链接描述借助该文档成功解决!...
RFID工具管理系统几大应用场景,RFID工具管理系统应用场景主要有哪些?RFID工具管理系统可以科学管理各种工具,使用RFID抗金属标签与工具绑定,可进行领取、归还、查找和维护工具等管理,提高借还工具效率,提高工具管理的准确性和高效性,落实责任人。RFID工具管理系统几大应用场景 RFID工具管理系统应用场景主要有: 一、铁路线路维护工具管理,铁路线路维护的工具种类多,规格相差大,使用场合分散,一直是管理的难点,在每个工具安装RFID电子标签后,可以在库房的门口安装RFID超高频读写
**第一章 程序的算法设计**一、题目要求运行最大公约数的常用算法,并进行程序的调试与测试,要求程序设计风格良好,并添加异常处理模块(如输入非法等)。二、算法构造程序的思路大致为:(1)利用随机函数rand()随机生成[1,100]的数;(3)用户根据提供的6种算法选择输入算法的序号即可执行该算法;(4)计算...
一、前言关于apache的commons-io源码包org.apache.commons.io.FilenameUtils文件名称操作工具类,进行操作系统判断isSystemWindows、文件名称标准化normalize处理、不同操作系统unix路径转换separatorsToUnix、通过文件名判断相当equals/equalsOnSystem/equalsNormalized/equalsN...
iOS开发内购详细版本说明 优雅地小男子 关注2017.02.23 11:08* 字数 877 阅读 8023评论 46喜欢 26一、最近公司很多的项目用到了内购,抽空整理下内购的详细内容吧。1、先从内购的iTunesConnect里配置说起吧,我们先进入苹果的iTunesConnect链接https://itunesconnect.appl
Problem Description设有一有向图,其顶点值为字符型并假设各值互不相等,采用邻接表表示法存储表示。设计一个算法,求该图中所有顶点的入度值(要求按顶点的存储顺序输出)。 Input有多组测试数据,每组数据的第一行表示图的顶点数n和图的边数e(0<n<30);第二行表示各顶点的值,按输入顺序进行存储;接下来有e行,每一行表示每条边所依附的顶点的存储下标i和j,两...
react-native React 0.54.2 弄个VPN pod update