nginx做反向代理时如何去除部分参数

-无名小卒- 发布于 12/04 14:59
阅读 230
收藏 0

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

以下是问题补充:

@-无名小卒-:事情是这样的,有一个后端接口有IP限制,只有nginx现在所在的主机能够访问。现在我为了让其他地方也能调用,使用nginx做代理提供给其他的主机去调,因此配了一个proxy_pass来完成这个功能。但我又不想其他地方都可以随意的调,于是加了认证信息,目前的认证过程是这样,客户端请求(GET)的地址会带认证信息(就是用户名、密码、随机码等)然后在proxy_pass那个地方用access_by_lu (12/04 22:41)
加载中
0
gammey
gammey

试过这个可以去除掉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");
                        end
                }
                proxy_pass http://192.168.1.102:9002;
        }

gammey
gammey
回复 @-无名小卒- : 我觉得你可以让请求者把验证信息放在header里,当然如果你们的系统适合这么做的话。如果用NGINX改签requestbody是有现成的方法proxy_set_body,但是我测试不成功。
-无名小卒-
-无名小卒-
我觉得你的思路应该是可以的参考的,但这样的话别人岂不是不带参数可以直接进行访问了,验证就被绕过了。
0
各种打杂
各种打杂

你发的问题有点不对,按照你题意   直接location test2 {proxy_pass ...... } 这样不就得了?

-无名小卒-
-无名小卒-
可能我之前没说清楚状况,我又补充了一些说明。
0
卧槽给我个名字
卧槽给我个名字

nginx rewrite 域名重写

-无名小卒-
-无名小卒-
客户端是访问不到proxy_pass的那个地址,因此不能简单的进行rewrite。可能是我之前没说清楚状况,我又补从了一些内容,请参考。
0
兜兜毛毛
兜兜毛毛

location /test1 {         
    rewrite ^(.*) http://www.aaa.com/test2;
}

兜兜毛毛
兜兜毛毛
回复 @-无名小卒- : 你的意思是外部调用nginx 然后nginx还需要做一个内部请求到后台管理(因为只能你这个nginx可以访问是吧)
-无名小卒-
-无名小卒-
客户端是访问不到proxy_pass的那个地址,因此不能简单的进行rewrite。可能是我之前没说清楚状况,我又补从了一些内容,请 参 考。
0
-无名小卒-
-无名小卒-

事情是这样的,有一个后端接口有IP限制,只有nginx现在所在的主机能够访问。现在我为了让其他地方也能调用,使用nginx做代理提供给其他的主机去调,因此配了一个proxy_pass来完成这个功能。但我又不想其他地方都可以随意的调,于是加了认证信息,目前的认证过程是这样,客户端请求(GET)的地址会带认证信息(就是用户名、密码、随机码等)然后在proxy_pass那个地方用access_by_lua引入一段脚本做控制,符合的可以通过正常走proxy_pass,不符合直接返回403。但是后端的那个接口的那个地址又不能带参数,带任何参数都会报错。因此我想能不能在这个地方在过滤一下,我的nginx可以接收参数完成验证后proxy_pass到后端接口时地址上就不需要继续带这些参数了。

0
gammey
gammey

set $request_uri $uri,或者lua实现,

总之这两个变量的关系是:

$request_uri: /stat.php?id=1585378&web_id=1585378
$uri /stat.php

应该就是你要的吧?

-无名小卒-
-无名小卒-
是的,但是要proxy_pass时候去掉参数,使请求后端的时候没有参数。
返回顶部
顶部