zoukankan      html  css  js  c++  java
  • [TCP/IP][distributed] proxy protocol 是什么

    问题描述:

    在Web分布式系统中,一般会搭建复杂的load blance系统来提供高性能的web服务。

    load blance有4层网络的,也有7层网络的。再经过这样的分布式网络之后,后面真正提供服务的

    程序可能会丧失掉client的网络信息,也就是IP地址以及TCP端口。

    解决方法:

    为了解决这样的问题,存在着这样一种协议。叫做 Proxy Protocol。

    正文

    1.  协议实现

    在三次握手之后,会增加一个TCP payload包,包payload长度48字节。如图:

    示例,如下图所示的第四个包就是proxy protocol的包。

    payload格式,根据V1,V2两个版本有所不同。如下是V1版本,是ASCII码格式:

    PROXY TCP4 202.112.144.236 10.210.12.10 5678 80
    
    PROXY TCP6 2001:da8:205::100 2400:89c0:2110:1::21 6324 80
    
    PROXY UKNOWN
    

     V2的略。(可参考文后的链接)

    2. nginx proxy的配置方法

    stream {
    
        server {
            listen              12345;
    
            proxy_pass          backend.example.com:8080;
            proxy_protocol      on;
        }
    
    }

    3. nginx server的配置方法

    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;
    }

    参考资料:

    https://www.jianshu.com/p/cc8d592582c9

  • 相关阅读:
    LINQ -2015-04-27
    wireshark的安装
    c#中的classes和objects一些知识【1】
    初学C#,用vs去开始hello world!
    file_get_contents HTTP request failed! Internal Server Error
    验证码二(验证码使用)
    接口调用 POST
    接口调用 GET方式
    百度地图改标注样式
    Linux-常用命令
  • 原文地址:https://www.cnblogs.com/hugetong/p/10901359.html
Copyright © 2011-2022 走看看