gpt4 book ai didi

nginx - 配置nginx发出后台请求

转载 作者:行者123 更新时间:2023-12-03 23:15:07 30 4
gpt4 key购买 nike

我正在构建一个应用程序,我需要对 api-data 组合使用情况进行一些分析。
下面是我的 nginx 配置 -

location /r/ {
rewrite /r/(.*)$ http://localhost:3000/sample/route1/$1 redirect;
post_action /aftersampleroute1/$1;
}
location /aftersampleroute1/ {
rewrite /aftersampleroute1/(.*) /stats/$1;
proxy_pass http://127.0.0.1:3000;
}

位置 /r/用于重定向浏览器请求 http://localhost:80/r/quwjDP4us转 API /sample/route1/quwjDP4us它使用 id quwjDP4us做某事。
现在在后台我想传递 id quwjDP4us到统计 api /stats/quwjDP4us这会更新该 ID 的数据库记录。

当我启动 nginx 并发出请求时 http://localhost:80/r/quwjDP4us nginx 成功地将我的请求重定向到我的应用程序,但没有在后台向 stats api 发出第二个请求。我错过了什么?

注意 - post_action不包含在 nginx 文档中,我可以使用备用模块/指令吗?

最佳答案

正如您正确提到的,post_action没有记录,一直被认为是非官方指令。

Nginx 从 1.13.4 版本开始提供了一个新的“镜像”模块,描述 here在文档中。所以我建议你试一试。在你的情况下,它看起来像这样 -

location /r/ {
rewrite /r/(.*)$ http://localhost:3000/sample/route1/$1 redirect;
mirror /stats;
}

location = /stats {
internal;
rewrite /sample/route1/(.*) /stats/$1;
proxy_pass http://127.0.0.1:3000;
}

这行不通!

我已经建立了一个测试配置,不幸的是这不起作用。它既不适用 rewrite也不是 return .但它适用于 proxy_pass .

为什么

解释如下。 HTTP 请求在 Nginx 中的处理过程中按顺序通过几个“阶段”。问题是 mirror在阶段 PRECONNECT 中触发这发生在阶段 REWRITE 之后在哪里 rewrite/ return结束请求处理。所以, mirror甚至不会被触发,因为它的处理将在以后发生。

如果从该位置提供文件或通过 proxy_pass 代理(或 fastcgi_pass 等),处理最终将达到 REWRITE相和 mirror将被执行。

Nginx 文档 here 中描述了阶段。 .

解决方法

如果没有权衡,我看不到任何好的解决方案。您可以创建一个额外的位置(返回重定向)并从 /r/ 代理您的请求,所以 mirror被触发。像这样,取决于您的其余配置:
location /r/ {
# you may need setting Host to match `server_name` to make sure the
# request will be caught by this `server`.
# proxy_set_header Host $server_name;
proxy_pass http://<ip from listen>:<port from listen>/redirect/;
mirror /stats;
}

location = /redirect {
rewrite /redirect(.*)$ http://localhost:3000/sample/route1$1 redirect;
}

当然,这是次优的,并且有额外的样板。

关于nginx - 配置nginx发出后台请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52603090/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com