Nginx

子目錄上的代理傳遞不起作用

  • October 6, 2022

我有一個在http://127.0.0.1:9650執行的 api 。例如,下面給出一個 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;

但那裡也沒有運氣。有沒有人建議我如何解決這個問題?

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”部分保持不變。


在前綴中使用可選 URI將通過proxy_pass 可選 URI 替換位置前綴來轉換請求的 URL location

例如:

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

在這種情況下,可選的 URI 是/,因此在請求的 URL 中,我們在傳遞上游之前/my-node/替換為。/

所以https://example.com/my-node/ext/health被傳遞到上游http://127.0.0.1:9650/ext/health- 注意“/my-node”部分已被刪除。

有關詳細資訊,請參閱proxy_pass 指令

引用自:https://serverfault.com/questions/1112363