代理指定网站解决302、303状态码的网站修改response

优采云 发布时间: 2021-07-03 23:01

  代理指定网站解决302、303状态码的网站修改response

  背景

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

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

  代理访问指定路径时指定网站解析302、303状态码网站修改响应头,修改响应的web内容1.访问指定路径跳转到网站

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

  # 访问http://www.a.com/jump,就跳到指定路径http://www.b.com/jump ,配置如下

location ~* ^/jump$ {

proxy_pass http://www.b.com/jump;

}

  2. 解决nginx直接返回302、303状态码的问题

  代理目标网站时,目标网站使用了302状态码,这样nginx直接返回后,URL已经改变,不在网站的控制之下,所以会出现这个问题已解决:

  使用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网站映射到当前网站的/目录

}

  以上代码流程: 访问时,nginx后台会访问获取返回的内容,状态码为302,如果不控制,浏览器会取出302中的位置直接访问,而位置是c网站的URL 有两种方式:一种是修改位置然后返回,另一种是proxy_redirect方法。

  3.修改响应头

  前两点是直接路径跳转。现在又要求修改302中位置的一些参数,那么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.block302;2.use 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) ';

}

  其他

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

  location ~* ^/test3$ {

proxy_pass http://www.b.com/test3;

sub_filter '这个网页的原始内容' '这个网页的修改后内容';

}

  总结

  找了很多资料都找不到文章,写这个文章自己记录

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线