配置proxy_pass多参数w/动态路由+ API调用



我需要为动态路由配置一个反向代理,该动态路由将变量chainId附加到axios向外部道德API的请求中。获得502坏网关。

服务器路由结构

/moralis/ERC20/${token.address}?chainId=${chainId}

路线实现

app.get('/moralis/ERC20/:address', async (req, res) => {
...
try {
const chainId = req.query.chainId ?? 1;
const chainIdHex = '0x' + chainId.toString(16);
const response = await rateLimit.fetchAndRetry(() =>
rateLimit.acquireToken(req, 'moralis', 3, () =>
axios.get(
`https://deep-index.moralis.io/api/v2/erc20/${req.params.address}/price?chain=${chainIdHex}`,
),
),
);

}
});

NGINX配置

location ~* ^/moralis/ERC20/(.*) {
proxy_pass http://127.0.0.1:4000$request_uri;
}

  1. 我需要axios调用的反向代理吗?
  2. 我实际上捕获整个request_uri吗?

您既不需要regex位置,也不需要$request_uri部分。只要使用一个简单的前缀位置,不要在上游地址后面添加任何东西,您的请求URI将被"按原样"传递:

location /moralis/ERC20/ {
proxy_pass http://127.0.0.1:4000;
}

在上游名称后面加上尾斜杠!它将被视为一个被代理的URI部分,完全改变proxy_pass指令的行为。如果你有正则表达式的位置可能会接管/moralis/ECR20/...请求URI,您可以使用一个^~位置修饰符:

location ^~ /moralis/ERC20/ {
proxy_pass http://127.0.0.1:4000;
}

阅读locationproxy_pass指令文档,找到一些更完整的解释,没有那么多字要读。

相关内容

  • 没有找到相关文章

最新更新