SSL重定向更改从HTTPResponse

时间:2018-05-21 19:59:40

标签: apache vapor perfect

我在AWS EC2实例上运行的服务器端应用程序中使用Perfect Framework。我使用以下代码获取客户端IP地址。

open static func someapi(request: HTTPRequest, _ response: HTTPResponse) {

    var clientIP = request.remoteAddress.host }

在我的EC2实例上安装ssl证书并开始将传入流量重定向到443端口之前,此工作正常。

现在这段代码给了我服务器的ip,我认为由于重定向,Perfect在某种程度上认为请求来自于它。

是否有其他方法可以获取客户端IP地址?或者我必须尝试别的吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

对于那些正在努力解决同一问题的人,如果有重定向,可以在其中一个名为“xForwardedFor”的标题字段中找到原始客户端ip,如下所示:

var clientIP = request.remoteAddress.host

    let forwardInfoResut = request.headers.filter { (item) -> Bool in
        item.0 == HTTPRequestHeader.Name.xForwardedFor
    }

    if let forwardInfo = forwardInfoResut.first {
        clientIP = forwardInfo.1
    }

希望这有助于某人,干杯!

答案 1 :(得分:0)

在问我们之前,或许你应该问一下你支付给支持的人以及管理基础设施的方式?

http连接在服务器以外的地方终止的约定是注入x-forwarded-for header。如果已存在此类标头,则中间服务器会在列表的前面注入客户端IP地址。