Перенаправление SSL изменяет IP-адрес клиента, считанный из HTTPResponse

Я использую Perfect Framework для моего серверного приложения, работающего на экземпляре AWS EC2. Я использую следующий код для получения IP-адреса клиента.

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

    var clientIP = request.remoteAddress.host }

Это работало нормально, пока я не установил ssl-сертификат на свой экземпляр EC2 и не начал перенаправлять входящий трафик на порт 443.

Теперь этот код дает мне IP-адрес моего сервера, я думаю, из-за перенаправления, Perfect так или иначе думает, что запрос приходит от самого себя.

Есть ли другой способ получить IP-адрес клиента? Или я должен попробовать что-то еще?

Спасибо!

2 ответа

Для тех, кто борется за ту же проблему, оригинальный ip клиента может быть найден в одном из полей заголовка с именем "xForwardedFor", если есть перенаправление, как показано ниже:

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
    }

Надеюсь, это кому-нибудь поможет, ура!

Возможно, вам следует спросить людей, которым вы платите за поддержку, и кто управляет инфраструктурой, как она работает, прежде чем спрашивать нас?

Соглашение, при котором http-соединение прерывается в другом месте, чем на сервере, заключается в добавлении заголовка x-forwarded-for. Если такой заголовок уже существует, промежуточный сервер вводит IP-адрес клиента в начало списка.

Другие вопросы по тегам