我有一个 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 指令了解详情。