#amazon-web-services #geolocation #ip #amazon-cloudfront
#amazon-web-сервисы #геолокация #ip — адрес #amazon-cloudfront
Вопрос:
Можно ли отправить Cloudfront заголовок, чтобы он просматривал IP-адрес в своей базе данных, а не IP-адрес клиента?
Например, если сервер хочет определить местоположение на основе IP-адреса, он может задать x-real-ip
и x-forwarded-for
, который Cloudfront будет затем использовать для поиска IP-адреса для определения местоположения.
В нынешнем виде я безуспешно пытался добавить следующие заголовки.
r.Header.Set("x-real-ip", user-ip)
r.Header.Set("x-forwarded-proto", user-ip)
r.Header.Set("x-forwarded-for", user-ip)
Затем я создаю рассылку Cloudfront, которая пересылает CloudFront-Viewer-City
, и запрос Lambda @edge viewer, который выполняет следующее.
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
const headers = request.headers;
let body = "";
let responseStatus = "200";
if (headers["cloudfront-viewer-city"]) {
body = headers['cloudfront-viewer-city'][0].value;
}
else {
responseStatus = "500";
body = "";
}
const response = {
status: responseStatus,
statusDescription: 'OK',
headers: {
'content-type': [{
key: 'Content-Type',
value: 'application/json'
}],
'access-control-allow-origin': [{
key: "access-control-allow-origin",
value: "*"
}]
},
body: makeBody(body)
};
callback(null, response);
};
function makeBody(city) {
let obj = {
city: city,
};
return JSON.stringify(obj);
}
Фактический результат заключается в том, что IP-адрес сервера получает поиск, а не перенаправленный IP-адрес.