proxy protocol介绍及nginx配置

2018-10-09  本文已影响0人  imec

proxy protocol是HAProxy的作者Willy Tarreau于2010年开发和设计的一个Internet协议,通过为tcp添加一个很小的头信息,来方便的传递客户端信息(协议栈、源IP、目的IP、源端口、目的端口等),在网络情况复杂又需要获取用户真实IP时非常有用。其本质是在三次握手结束后由代理在连接中插入了一个携带了原始连接四元组信息的数据包。

proxy_protocol流程

proxy protocol 格式

version 1 header

// PROXY AF L3_SADDR L3_DADDR L4_SADDR L4_DADDR\r\n 
PROXY TCP4 202.112.144.236 10.210.12.10 5678 80\r\n
PROXY TCP6 2001:da8:205::100 2400:89c0:2110:1::21 6324 80\r\n
PROXY UKNOWN\r\n

version 2 header

\x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A
\x2 // v2
\x0 // LOCAL
\x1 // PROXY
\x0 // AF_UNSPEC
\x1 // AF_INET
\x2 // AF_INET6
\x3 // AF_UNIX
\x0 // UNSPEC
\x1 // STREAM
\x2 // DGRAM

Tips

nginx proxy protocol 配置

proxy protocol 插入配置

stream {

    server {
        listen              12345;

        proxy_pass          backend.example.com:8080;
        proxy_protocol      on;
    }

}

proxy protocol 接收配置

http {
    log_format elb_log '$proxy_protocol_addr';

    server {

        listen 8080 proxy_protocol;
        root /usr/local/nginx/html;
        index index.html index.htm;

        server_name hello-world.com;
        set_real_ip_from 192.168.10.0/24;
        real_ip_header  proxy_protocol;
    }

    location / {
        try_files $uri $uri/ /index.html;

        proxy_pass http://backend.example2.com:8088;
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
    }

    access_log /usr/local/nginx/stream.log elb_log;
}

reference

上一篇 下一篇

猜你喜欢

热点阅读