开发者社区> 问答> 正文

nginx做反向代理时如何去除部分参数 400 请求报错 

nginx转发请求如何去掉?后面的参数例如我的请求路径是http://localhost/test1?a=1,希望通过proxy_pass将请求转发到http://www.aaa.com/test2上, 并且转发请求不带原始请求的参数,如何实现?

展开
收起
kun坤 2020-05-29 16:30:06 1979 0
1 条回答
写回答
取消 提交回答
  • 试过这个可以去除掉get的信息:
    1.如果不带参数直接走proxy_pass;
    2.如果带参数会rewrite到/testinfo且不带参数,然后再走第一条的规律
    location ~ /testinfo {
    rewrite_by_lua_block {
    args = ngx.req.get_uri_args();
    local count = 0
    for k,v in pairs(args) do
    count = count + 1
    end
    if count > 0 then
    return ngx.redirect("/testinfo");
    proxy_pass http://192.168.1.102:9002;
    }######回复
    我觉得你可以让请求者把验证信息放在header里,当然如果你们的系统适合这么做的话。如果用NGINX改签requestbody是有现成的方法proxy_set_body,但是我测试不成功。######我觉得你的思路应该是可以的参考的,但这样的话别人岂不是不带参数可以直接进行访问了,验证就被绕过了。######你发的问题有点不对,按照你题意 直接location test2 {proxy_pass ...... } 这样不就得了?######可能我之前没说清楚状况,我又补充了一些说明。######nginx rewrite 域名重写######客户端是访问不到proxy_pass的那个地址,因此不能简单的进行rewrite。可能是我之前没说清楚状况,我又补从了一些内容,请参考。######location /test1 {
    rewrite ^(.*) http://www.aaa.com/test2;
    }######回复
    : 你的意思是外部调用nginx 然后nginx还需要做一个内部请求到后台管理(因为只能你这个nginx可以访问是吧)######客户端是访问不到proxy_pass的那个地址,因此不能简单的进行rewrite。可能是我之前没说清楚状况,我又补从了一些内容,请 参 考。######事情是这样的,有一个后端接口有IP限制,只有nginx现在所在的主机能够访问。现在我为了让其他地方也能调用,使用nginx做代理提供给其他的主机去调,因此配了一个proxy_pass来完成这个功能。但我又不想其他地方都可以随意的调,于是加了认证信息,目前的认证过程是这样,客户端请求(GET)的地址会带认证信息(就是用户名、密码、随机码等)然后在proxy_pass那个地方用access_by_lua引入一段脚本做控制,符合的可以通过正常走proxy_pass,不符合直接返回403。但是后端的那个接口的那个地址又不能带参数,带任何参数都会报错。因此我想能不能在这个地方在过滤一下,我的nginx可以接收参数完成验证后proxy_pass到后端接口时地址上就不需要继续带这些参数了。######有点麻烦的######set $request_uri $uri,或者lua实现,
    总之这两个变量的关系是:
    $request_uri: /stat.php?id=1585378&web_id=1585378
    $uri /stat.php
    应该就是你要的吧?######是的,但是要proxy_pass时候去掉参数,使请求后端的时候没有参数。

    2020-05-29 16:30:12
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
《Nginx 代理系统常用手册》 立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手 立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册 立即下载