nginx转发请求如何去掉?后面的参数例如我的请求路径是http://localhost/test1?a=1,希望通过proxy_pass将请求转发到http://www.aaa.com/test2上, 并且转发请求不带原始请求的参数,如何实现?
试过这个可以去除掉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时候去掉参数,使请求后端的时候没有参数。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。