跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教如何通过反向代理请求路径时加入查询参数?呢?
未分類
24 2 月 2021

请教如何通过反向代理请求路径时加入查询参数?呢?

请教如何通过反向代理请求路径时加入查询参数?呢?

資深大佬 : daimaosix 1

业务需要通过 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

大佬有話說 (16)

  • 資深大佬 : maocat

    $query_string

  • 主 資深大佬 : daimaosix

    @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;
    }

  • 資深大佬 : ksmagi

    https://lmgtfy.app/?q=nginx+rewrite+url+query+string

  • 主 資深大佬 : daimaosix

    @maocat 下午用$query_string 试了一下还是不行。。可能是我放的位置不对吧,测试了好几次都没通过。。

  • 資深大佬 : oxromantic

    问句题外话, 既然 set_header 管用, 为了快速上线, 为啥不用 header 传参方式呢?

  • 資深大佬 : ksmagi

    google 第一条就是一摸一样的问题: https://stackoverflow.com/questions/12946437/rewriting-a-url-to-a-query-string-on-apache-and-nginx

  • 資深大佬 : oxromantic

    @ksmagi 你这个只是客户端跳转行为吧, 不是反向代理

  • 主 資深大佬 : daimaosix

    @oxromantic 主要是没用 header 做过。。。

  • 資深大佬 : oxromantic

    @daimaosix 你的例子里都有 3 个设 header 的方式, 例子还不够么…

  • 主 資深大佬 : daimaosix

    @oxromantic 这个我搜索了一下好像不能给 url 传参吧

  • 資深大佬 : ksmagi

    @oxromantic rewrite 不是 redirect/permanent 的时候不是客户端重定向。
    解决方案如下:
    location = /test/ {
    proxy_pass http://127.0.0.1:8000;
    }
    location /test/ {
    rewrite ^/test/(.*)$ /test/?q=$1 last;
    }

  • 主 資深大佬 : daimaosix

    @ksmagi 谢谢啊老哥,我刚才试了一下,接口还是返回 404 错误

  • 資深大佬 : ksmagi

    @daimaosix 盲猜 location 匹配顺序上的问题 https://stackoverflow.com/a/45129826
    刚刚 at 错 oxromantic 老哥不好意思

  • 主 資深大佬 : daimaosix

    @ksmagi 我又试了一遍,调整了一下,接口还是 404.。。

  • 主 資深大佬 : daimaosix

    @ksmagi 是因为 proxy_pass 的不对嘛,我刚才检查了一下应该是 proxy_pass http://127.0.0.1:8000/ip/

  • 資深大佬 : zpfhbyx

    location ^~ /net/comm/(.*) {
    proxy_pass http://127.0.0.1:8000/ip/?ip=$1&$query_string
    }

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具