业务需要通过 Nginx 反向代理 Get 请求后端接口,但发现反向代理服务器访问路径中无法添加查询参数?
原配置
location /net/comm/ {
proxy_pass http://localhost:9000;
proxy_set_header Host localhost;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
这样可以通过访问 http://a.com/net/comm/127.0.0.1 获取数据
但需要将请求路径调整为 http://a.com/net/comm/?ip=127.0.0.1 获取数据时,调整了反代规则:
location /net/comm/?ip= {
proxy_pass http://localhost:9000;
proxy_set_header Host localhost;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
此时,反向代理服务器会报 404 错误。接着又进行了调整:
location ^~ /net/comm/ {
proxy_pass http://localhost:9000;
proxy_set_header Host localhost;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
此时,接口会返回 404 错误。
麻烦 V 友给看看,需要怎么调整才可以实现带查询参数访问呢?将请求路径 http://a.com/net/comm/127.0.0.1 调整为 http://a.com/net/comm/?ip=127.0.0.1
1
maocat 2021-02-22 16:14:16 +08:00
$query_string
|
2
daimaosix OP @maocat 是这样的吗老哥
location ^~ /net/comm/$query_string { proxy_pass http://localhost:9000; proxy_set_header Host localhost; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } |
3
ksmagi 2021-02-22 16:16:24 +08:00
|
4
daimaosix OP @maocat 下午用$query_string 试了一下还是不行。。可能是我放的位置不对吧,测试了好几次都没通过。。
|
5
oxromantic 2021-02-22 16:17:35 +08:00
问句题外话, 既然 set_header 管用, 为了快速上线, 为啥不用 header 传参方式呢?
|
6
ksmagi 2021-02-22 16:18:44 +08:00
|
7
oxromantic 2021-02-22 16:23:07 +08:00
@ksmagi 你这个只是客户端跳转行为吧, 不是反向代理
|
8
daimaosix OP @oxromantic 主要是没用 header 做过。。。
|
9
oxromantic 2021-02-22 16:25:50 +08:00
@daimaosix 你的例子里都有 3 个设 header 的方式, 例子还不够么...
|
10
daimaosix OP @oxromantic 这个我搜索了一下好像不能给 url 传参吧
|
11
ksmagi 2021-02-22 16:38:42 +08:00 1
@oxromantic rewrite 不是 redirect/permanent 的时候不是客户端重定向。
解决方案如下: location = /test/ { proxy_pass http://127.0.0.1:8000; } location /test/ { rewrite ^/test/(.*)$ /test/?q=$1 last; } |
13
ksmagi 2021-02-22 16:55:07 +08:00
|
15
daimaosix OP @ksmagi 是因为 proxy_pass 的不对嘛,我刚才检查了一下应该是 proxy_pass http://127.0.0.1:8000/ip/
|
16
zpfhbyx 2021-02-22 17:56:40 +08:00
location ^~ /net/comm/(.*) {
proxy_pass http://127.0.0.1:8000/ip/?ip=$1&$query_string } |