Перенаправление 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-адрес клиента в начало списка.