gpt4 book ai didi

Nginx真实客户端IP转TCP流后端

转载 作者:行者123 更新时间:2023-12-04 15:40:55 31 4
gpt4 key购买 nike

我正在尝试使用 Nginx 作为我的 TCP 守护程序的代理,以使 Nginx 成为 SSL/TLS 前端,以及负载控制。

我的后端应用程序需要真实的客户端 IP,这是一个问题。

stream {
server {
listen 3333;
proxy_pass 127.0.0.1:2222;
}
}

我在文档中找到了一种解决方案:
proxy_bind $remote_addr transparent;

但这太复杂了:

"In order for this parameter to work, it is necessary to run nginx worker processes with the superuser privileges and configure kernel routing table to intercept network traffic from the proxied server."



有没有其他方法可以将 $remote_addr 传递给后端?

我尝试使用 sub_filter 修改客户端消息正文,发送 http header 等。但所有这些都只能与 http 上下文一起使用,不幸的是不能与流一起使用。

最佳答案

据我所知,只有两种解决方案:proxy_bindproxy_protocol .
代理绑定(bind)
正如您从文档中引用的那样,工作流程将需要 super 用户权限。明显地。这不是最佳做法。此外,它可能会导致返回到远程客户端的连接问题。
假设 Nginx 作为 nginx 运行用户,运行此命令以授予其权限。

usermod -aG sudo nginx
代理协议(protocol)
此解决方案要求上游目的地(例如后端应用程序)接受 PROXY 协议(protocol)。
stream {
server {
listen 3333;
proxy_pass 127.0.0.1:2222;
proxy_protocol on;
}
}
上述解决方案假设 Nginx 服务器是网络的入口点。如果有边缘设备(例如负载均衡器),它很可能正在更改源 IP。在这种情况下,您需要在边缘设备上启用代理协议(protocol)并启用 proxy_protocol server 中的监听器堵塞。我还没有测试过,但是这样的东西应该可以工作。
stream {
server {
listen 3333 proxy_protocol;
proxy_pass 127.0.0.1:2222;
proxy_protocol on;
set_real_ip_from $proxy_protocol_addr;
}
}

关于Nginx真实客户端IP转TCP流后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40873393/

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