Nginx使用TCP4层代理获取客户端真实IP
nginx代理tcp需要安装stream模块,此时涉及到一个代理协议proxy protocol的使用
原理:nginx代理tcp(四层tcp代理)时增加一个头信息,其中包含了客户端IP的信息,后端则想办法从此头报文中获取IP。代理协议proxy protocol的使用场景(都是为了获取客户端信息)
1、首先nginx配置后端需要被转发的服务
stream {
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
access_log logs/tcp.log proxy;
upstream tcpzf {
server 192.168.1.11:8899;
}
server {
listen 8899;
#listen 8899 ssl;
#ssl_certificate /data/nginx/cert/xxx.pem;
#ssl_certificate_key /data/nginx/cert/xxx.key;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers HIGH:!aNULL:!MD5;
proxy_pass tcpzf;
proxy_protocol on; #添加此项
}
}
2、服务端就是要拿到这段代理头报文进行IP获取,所以需要编写代码来获取
打开配置后,第一次socket连接时,服务端会收到proto协议:
PROXY TCP4 172.16.10.90 172.16.10.218 52505 5556
参考链接;
https://blog.csdn.net/qmqm011/article/details/112950245
<< 上一篇
下一篇 >>
网友留言(0 条)