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

分享到:
关键词:Linux运维

网友留言(0 条)

发表评论