我需要为动态路由配置一个反向代理,该动态路由将变量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;
}
- 我需要axios调用的反向代理吗?
- 我实际上捕获整个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;
}
阅读location
和proxy_pass
指令文档,找到一些更完整的解释,没有那么多字要读。