nginx做网站转发时处理302、303返回状态码、修改response返回的header和网页内容

您所在的位置:网站首页 ios14视频悬浮窗怎么弄 nginx做网站转发时处理302、303返回状态码、修改response返回的header和网页内容

nginx做网站转发时处理302、303返回状态码、修改response返回的header和网页内容

2023-05-06 06:24| 来源: 网络整理| 查看: 265

背景

遇到一个限制域名的平台,于是使用nginx在做网站转发,其中目标网站在访问过程中使用了多个302、303的返回状态,以便跳转到指定目标(为什么限制,就是防止他的网站的镜像)。

在查找了一段资料后,发现nginx可以proxy网站,让其在自己的网站路径上访问。本文总共解决以下两个需求:

访问指定路径时,代理指定网站 解决302、303状态码的网站 修改response的header 修改response的网页内容 1. 访问指定路径跳转到网站

使用proxy_pass指令来实现,示例如下:

# 访问http://www.a.com/jump,就跳到指定路径http://www.b.com/jump ,配置如下 location ~* ^/jump$ { proxy_pass http://www.b.com/jump; } 2. 解决302,303的状态码nginx直接返回问题

在代理目标网站时,目标网站使用了302的状态码,这样nginx直接返回后,网址变了,不受本网站的控制,下来就解决此问题: 使用proxy_redirect指令来实现,示例如下:

# 访问http://www.a.com/jump,就跳到指定路径http://www.b.com/jump ,返回302,其中要跳转到www.c.com网站去,然后还是访问本地网站,配置如下 location ~* ^/jump$ { proxy_pass http://www.b.com/jump; proxy_redirect http://www.c.com/ /; #请求c网站映射到当前网站的/目录 }

以上代码过程:访问http://www.a.com/jump时,nginx后台会访问http://www.b.com/jump获取返回内容,且状态码时302,如果不控制的话,浏览器会把302中location拿出来直接访问,而location是c网站的网址,有两种办法一种是修改location然后返回,一种是就是proxy_redirect方式。

3. 修改response的header

前两点是直接路径跳转的,现在又有一个需求就是修改302中的location中的一些参数,那么proxy_redirect就没有办法了,这个时候需要使用ngx_lua模块了,这个模块可是用于lua语言进行控制nginx的一些逻辑。

需要安装LuaJIT,并且下载lua-nginx-module和ngx_devel_kit备用,(参考Nginx编译安装Lua模块)

然后需要重新安装nginx,其中配置时把备用的两个东西以--add-module=/XXX/YYY/ngx_devel_kit-XXXX形式来引入进来,然后安装等等

配置文件做如下修改,主要两步:1.拦截302;2.使用rewirte_by_lua使用lua语言进行逻辑处理:

proxy_intercept_errors on; recursive_error_pages on; location ~* ^/test2$ { proxy_pass http://www.b.com/test2; error_page 302 = @error_page_302; } # 拦截处理器,其中rewrite_by_lua中后面的字符串就是lua模块的代码,`string.gsub`字符串替换,`local upstream_http_location`定义变量 # `ngx.redirect`跳转到指定路径 location @error_page_302 { rewrite_by_lua ' local upstream_http_location = string.gsub(ngx.var.upstream_http_location, "ac.95516.com","sp.xadaoke.cn") ngx.redirect(upstream_http_location) '; } 其他

如果想替换response返回的内容,可以使用ngx_http_sub_module模块来处理,这个模块需要在安装nginx时配置加上--with-http_sub_module,配置中需要如下代码:

location ~* ^/test3$ { proxy_pass http://www.b.com/test3; sub_filter '这个网页的原始内容' '这个网页的修改后内容'; } 总结

找了很多资料,都没有找到符合文章,自己写此文章记录一下



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3