2010-11-17 16 views
0

J'ai un service qui s'exécute dans Amazon Ec2. Le service expose à la fois un point de terminaison http et un point de terminaison https. Je fais une recherche geo sur l'adresse IP de l'utilisateur lorsque je connecte les données. Tout fonctionne très bien sur les demandes arrivant dans le point de terminaison http. Je dois saisir l'en-tête X-Forwarded-For pour que je ne prenne pas l'adresse UP Load Up d'Amazon Load Balancer et je suis toujours capable d'obtenir ce dont j'ai besoin. Cependant, sur les requêtes qui arrivent sur le point de terminaison https, toutes les adresses IP sont les mêmes.Comment obtenir l'adresse IP de la demande sur une demande SSL

Afin de tirer l'adresse IP J'utilise le code C#:

public static string FetchClientIp(HttpRequest req) 
    { 
     var value = req.Headers["X-Forwarded-For"]; 
     return string.IsNullOrEmpty(value) ? req.UserHostAddress : value; 
    } 

Je ne trouve rien d'autre que je dois faire est spécifique à https demandes J'espère donc que quelqu'un ici a couru dans ce avant. Je vais lancer un test pour essayer de mieux isoler le problème.

Merci

+0

C'est évidemment le gestionnaire de trafic Amazon qui pose problème, et c'est assez ésotérique donc je ne sais pas quelle chance vous aurez ici. Suggérez-vous de consulter les forums de fournisseurs ou de soutien. – annakata

+0

Suggestion folle: vous savez avec certitude que l'adresse IP du noeud final qui vous connecte n'est pas l'adresse IP du client? –

Répondre

0

Cela dépend comment vous avez votre ELB mis en place.

Si vous terminez SSL sur l'ELB (new feature as of October 2010), l'adresse IP du client sera dans "X-Forwarded-For".

HttpContext.Current.Request.Headers["X-Forwarded-For"] 

On dirait que vous mettez fin à SSL sur vos serveurs Web, puis ELB ne peut pas déchiffrer le trafic et ajouter l'en-tête « Forwarded-For X- » à la requête HTTP. Ainsi, l'adresse IP du client dans l'en-tête "REMOTE_ADDR" (qui est l'en-tête renvoyé par HttpRequest.UserHostAddress) est l'adresse IP du dernier saut - dans ce cas, l'adresse IP interne de l'ELB. Gardez à l'esprit que "X-Forwared-For" peut contenir plusieurs adresses IP, comme décrit dans http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/index.html?SvcIntro.html#X-Forwarded-For. Dans ce cas, vous êtes probablement plus intéressé par la première adresse répertoriée.