【问题标题】:How do I rewrite request_uri variable in a location match如何在位置匹配中重写 request_uri 变量
【发布时间】:2018-12-29 03:28:46
【问题描述】:

Java 后端给了我几个接口,比如:

/admin/login
/client/query 
/agent/update 

我是一名前端工程师,我必须将这些接口与 ajax 一起使用。因为我们会将我们的项目部署在同一台服务器上,所以我需要使用 nginx 代理将这些 ajax 请求定向到 java 服务。但是你可以看到接口以不同的路径开始,所以我在我的代码中用“/api”作为前缀,并如下配置nginx

axios.post('/api/admin/login'),
axios.post('/api/client/query'),
axios.post('/api/agent/update')

location /api {
    proxy_pass http://127.0.0.1:8080$request_uri;
    proxy_set_header Host 127.0.0.1;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

我的问题来了:

实际上java服务获取请求路径:/api/admin/login,而不是/admin/login,所以他们无法处理那个请求。我可以在 nginx 中重写我的 request_uri 以便 java 获取没有 /api 前缀的请求吗?

【问题讨论】:

    标签: nginx


    【解决方案1】:

    您不需要为此进行任何重写。使用以下location 块:

    location /api/ {
        proxy_pass http://127.0.0.1:8080/;
        proxy_set_header Host 127.0.0.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    

    proxy_pass 指令here 中查看有关斜杠的更多信息。

    【讨论】:

      【解决方案2】:

      复制粘贴并改编自different question,但应该可以解决问题。

      location /api {
       rewrite ^/api(/.*)$ $1 last;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-24
        • 2016-07-12
        相关资源
        最近更新 更多