mosn / mosn

The Cloud-Native Network Proxy Platform
https://mosn.io
Apache License 2.0
4.43k stars 797 forks source link

mosn如何转发代理请求 #2280

Open wkwen opened 1 year ago

wkwen commented 1 year ago

Your question

我现在用的非透明代理,客户端访问mosn的地址,然后把真正访问的地址放在host里面去转发 例如客户端要访问百度 curl 127.0.0.1:15001 --header 'x-mosn-host: www.baidu.com' 这样就能访问到了 但是现在的情况是,内网不能访问百度,需要挂代理才能访问 例如 curl -i www.baidu.com -x 10.152.11.11:7000 所以这里的话,mosn是如何在访问百度的时候,用代理去访问,请我我需要怎么设置,或者改哪块的代码

Environment

Logs

3062 commented 1 year ago

@wkwen 你好,方便发一下 mosn 配置吗

wkwen commented 1 year ago

这个其实和我的配置是没关系的,我只是想知道mosn怎么实现代理访问upstream的方法 以下列配置为例,我想要访问www.baidu.com,但是公司内网需要挂代理才能访问,这个代理在配置文件或者代码哪块可以添加


    "disable_upgrade" : true,
    "servers":[
        {
            "default_log_path":"stdout",
            "routers":[
                {
                    "router_config_name":"client_router",
                    "virtual_hosts":[{
                        "name":"clientHost",
                        "domains": ["*"],
                        "routers": [
                            {
                                "match":{"prefix":"/"},
                                "route":{"cluster_name":"clientCluster"}
                            }
                        ]
                    }]

                }
            ],
            "listeners":[
                {
                    "name":"clientListener",
                    "address": "127.0.0.1:2045",
                    "bind_port": true,
                    "filter_chains": [{
                        "filters": [
                            {
                                "type": "proxy",
                                "config": {
                                    "downstream_protocol": "Http1",
                                    "router_config_name":"client_router"
                                }
                            }
                        ]
                    }]
                }
            ]
        }
    ],
    "cluster_manager":{
        "clusters":[
            {
                "name": "clientCluster",
                "type": "SIMPLE",
                "lb_type": "LB_RANDOM",
                "max_request_per_conn": 1024,
                "conn_buffer_limit_bytes":32768,
                "hosts":[
                    {"address":"www.baidu.com"}
                ]
            }
        ]
    },
    "admin": {
        "address": {
            "socket_address": {
                "address": "0.0.0.0",
                "port_value": 34901
            }
        }
    }
}
wkwen commented 1 year ago

@3062 请问有mosn讨论群吗? 官网上面的钉钉讨论群二维码图片一直点不开

3062 commented 1 year ago

@wkwen 钉钉群:33547952

wkwen commented 1 year ago

@3062 你好,已经申请加入了,还有上面的代理问题mosn目前有解决方案吗?

YIDWang commented 1 year ago

其实就一条记录而已。你可以理解 dns 是原来地址 a ,现在的地址是 b。修一下服务pubsub 逻辑就可以了。

wkwen commented 1 year ago

其实就一条记录而已。你可以理解 dns 是原来地址 a ,现在的地址是 b。修一下服务pubsub 逻辑就可以了。

客户端可能会访问很多外网请求,不同的外网请求会使用不同的代理 使用go的服务的话是这样的。不同的代理请求会创建不同的http client

// 代理地址
proxyUrl := "http://10.123.11.11:8888"
// 真实地址
realUrl := "http://www.baidu.com"

proxy := func(_ *http.Request) (*url.URL, error) {
    return url.Parse(proxyUrl)
}

c := &HttpClient{
    addr: realUrl,
    hc: &http.Client{
    Transport: &http.Transport{
        Proxy:       proxy
    }
    }
}
c.Get(xxx)
doujiang24 commented 1 year ago

挺有意思的一个需求场景 没理解错的话,应该是跟上游建立连接的时候,需要通过这个代理去建立连接

据我所知,mosn 应该还不支持这种用法 如果想支持的话,可以看下这块的代码,如果只需要 http 协议支持的话,应该改动量也还好 https://github.com/mosn/mosn/blob/d58990ebee163efa57a9dd01d6edd7037326be70/pkg/stream/http/connpool.go#L298

wkwen commented 1 year ago

挺有意思的一个需求场景 没理解错的话,应该是跟上游建立连接的时候,需要通过这个代理去建立连接

据我所知,mosn 应该还不支持这种用法 如果想支持的话,可以看下这块的代码,如果只需要 http 协议支持的话,应该改动量也还好

https://github.com/mosn/mosn/blob/d58990ebee163efa57a9dd01d6edd7037326be70/pkg/stream/http/connpool.go#L298

感谢,我已经知道在哪儿改了,需要改一下http的报文发送格式