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