gpt4 book ai didi

nginx - 如何在 nginx 中进行 Web 服务调用?

转载 作者:行者123 更新时间:2023-12-04 14:11:04 25 4
gpt4 key购买 nike

什么:

我想在通过 nginx 的每个请求上从 nginx 内部向 web 服务发出请求,并根据我从 web 服务获得的响应应用一些进程。

应用:

我使用 nginx 作为反向代理,并且有多个 Web 服务将流量路由到这些 Web 服务。我想添加一个额外的 web 服务(让我们称之为 AdminService)作为管理员,该服务将处理诸如安全、计费和其他流量分析和预处理之类的事情。
对于通过 nginx 的每个请求,我需要向 AdminService 发出请求,然后管理服务将分析请求,更新一些统计信息等,并使用一些标签进行响应。然后,nginx 会根据返回的标签更新一些 header ,并将请求转发到适当的 url。

我查看了 Lua 模块,它似乎没有进行网络服务调用。
我还看到有可用的 Java、Groovy 和 Clojure 模块,这可能是我应该关注的吗?否则我应该看什么?

最佳答案

一种选择是使用 auth_request模块。它不是根据您的场景设计的,也不是默认的 Nginx 模块,因此您需要从源代码构建以使用 ./configure --with-http_auth_request_module 编译它。

auth_request 用于通过远程 HTTP 调用预先验证 Nginx 请求。只要响应头是 HTTP 200,那么初始请求就会正常处理。这可用于将请求发送到您的 AdminService,响应将能够确定接下来发生的事情。

就像是:

# Default location
location / {
auth_request /AdminService;

# Look for X_UpstreamHost: header in the response
auth_request_set $x_upstreamhost $upstream_http_x_upstreamhost;

# Use the value of the response header to choose the internal processing host
proxy_pass http://$x_upstreamhost;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;

}

# Send requests for AdminService to the AdminService
# This expects AdminService to be listening on a path called AdminService
# and based at ##adminip##
location /AdminService {
proxy_pass http://##adminip##;
}

这将首先将传入请求发送到由 AdminService 定义的主机。此服务必须以正常的 200 header 以及 x_upstreamhost:#internalHost# 响应。其中#internalHost# 是您要处理请求的主机的 ip 或 dn。

试试看,如果遇到问题,请发布您的 server {} block ,有人会看一看。

关于nginx - 如何在 nginx 中进行 Web 服务调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32778839/

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