子目录上的代理传递不起作用

子目录上的代理传递不起作用

我有一个 API 正在运行http://127.0.0.1:9650。例如下面给出一个 json 对象作为响应:

curl http://127.0.0.1:9650/ext/health

我想做以下工作https://example.com/my-node/ext/health

我有以下 nginx 配置:

 location /my-node {
    proxy_pass http://127.0.0.1:9650;
    proxy_http_version 1.1;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }

但这似乎不起作用(我得到了 404)

我尝试添加:

proxy_redirect http://127.0.0.1:9650 /my-node;

但也没有运气。有人能建议我如何解决这个问题吗?

答案1

使用proxy_pass 没有一个可选 URI(例如proxy_pass http://127.0.0.1:9650;),请求的 URL 不经修改地向上游传递。

因此https://example.com/my-node/ext/health传递给上游http://127.0.0.1:9650/my-node/ext/health- 请注意“/my-node”部分保持完整。


使用proxy_pass 一个可选 URI字首 location将通过使用可选 URI 替换位置前缀来翻译请求的 URL。

例如:

location /my-node/ {
    proxy_pass http://127.0.0.1:9650/;
    ...
}

在这种情况下,可选 URI 是/,因此在传递上游之前,/my-node/请求的 URL 会被替换为。/

因此https://example.com/my-node/ext/health传递给上游http://127.0.0.1:9650/ext/health- 请注意“/my-node”部分已被删除。

proxy_pass 指令了解详情。

相关内容