运行 SuperSocket 在 proxy 和 load balancer 之后。

Keywords: Proxy, Load Balancer

出于安全性和高可用性的考虑,我们常常将 SuperSocket 运行在 Proxy 或者 Load Balancer 之后。在这种情况下,SuperSocket 的客户端将是 proxy,load balancer或者其它前端服务器。这样会使 SuperSocket无法得知连接的真正来源。 不过,SuperSocket 提供了获取连接真正来源的方法。

启用 Proxy Protocol V1/V2 的支持

来源: https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt

通过 API 启用 Proxy Protocol

var host = SuperSocketHostBuilder.Create<MyPackage, MyPackageFilter>(args)    
    .ConfigureSuperSocket(options =>
    {
        options.Name = "CustomProtocol Server";
        options.EnableProxyProtocol = true;
    }).Build();

通过配置文件启用 Proxy Protocol

appsettings.json

{
    "serverOptions": {
        "name": "TestServer",
        "enableProxyProtocol": true,
        "listeners": [
            {
                "ip": "Any",
                "port": 4040
            }
        ]
    },
    "AllowedHosts": "*"
}

获取连接的真实来源地址

// AppSession session

session.RemoteEndPoint

or

(session as IAppSession).Connection.ProxyInfo?.SourceEndPoint