nginx 转发 tcp 后端获取客户端真实 IP

2022-08-24 15:35:51 +08:00
 toyst

用的 nginx 代理 udpxy ,

udpxy 显示的是 nginx 服务器的 IP 地址,

抓包发现 udpxy 是通过 TCP 链接 IP 来记录的客户端地址,

尝试用 nginx 的 TCP 代理,

在 /etc/nginx/nginx.conf 配置里面添加如下配置,

stream {
	server {
		listen 9999;
		proxy_pass 192.168.1.1:50000;
		proxy_protocol on;
	}
}

但是 udpxy 显示的仍然是 nginx 服务器 IP 地址,请问还需要改哪里吗?

3845 次点击
所在节点    NGINX
13 条回复
Renewmm
2022-08-24 15:38:32 +08:00
在 nginx 设置一个请求头将真实 ip 发给程序
allenforrest
2022-08-24 15:39:29 +08:00
udpxy 不支持 proxy protocol 的话,你这个配置没法透传 IP 给 udpxy 诶。
可以试试看 IP transparent 方案:
proxy_bind $remote_addr transparent
allenforrest
2022-08-24 15:39:57 +08:00
cs8425
2022-08-24 15:44:49 +08:00
可以参考下 haproxy proxy protocol 跟 mmproxy (go-mmproxy)
c332030
2022-08-24 15:50:15 +08:00
楼主是四层代理吧,传报文头是七层代理
CEBBCAT
2022-08-24 15:52:33 +08:00
看一下这篇文章 https://razeen.me/posts/nginx-tcp-stream-proxy-keep-real-client-ip/ ,关键词 Proxy Protocol
zliea
2022-08-24 15:53:27 +08:00
proxy_set_header X-Real-IP $remote_addr;
zliea
2022-08-24 15:54:26 +08:00
看错了,是 tcp 的真实 ip ,上边的是 http 的
tramm
2022-08-24 16:31:32 +08:00
在线蹲一个解决方案, 虽然现在单机还扛得住...

#3 这个里面只看 Nginx -> Nginx 的. 如果直接转发到我的服务端是不是还得我的服务端支持 PROXY Protocol 啊?
cs8425
2022-08-24 16:43:18 +08:00
@tramm 参考下 mmproxy (go-mmproxy), Linux 限定
toyst
2022-08-24 17:11:18 +08:00
```
sub_filter '<td>192.168.1.11' '<td>$remote_addr';
```

在 location 里面用这个热替换了,
有个坑,自带的 sub_filter 不支持正则,第三方的 subs_filter (多个 s) 支持正则。
tramm
2022-08-25 08:13:32 +08:00
@cs8425 我去看看 :P
ShuA1
2022-08-25 09:20:41 +08:00
tcp 是 4 层代理,修改报文头是需要 7 层代理的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/875073

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX