Maison >développement back-end >Tutoriel Python >Comment obtenir la véritable adresse IP de l'utilisateur dans Django lors de l'utilisation d'un proxy inverse ?

Comment obtenir la véritable adresse IP de l'utilisateur dans Django lors de l'utilisation d'un proxy inverse ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-05 03:51:02717parcourir

How to Get the True User IP Address in Django When Using a Reverse Proxy?

Comment récupérer l'adresse IP de l'utilisateur dans Django

Lors du développement d'applications Django, vous pouvez rencontrer le besoin d'obtenir l'adresse IP de l'utilisateur. Ceci est utile à des fins de localisation, d'analyse du trafic ou de sécurité.

Une approche courante consiste à utiliser l'attribut request.META['REMOTE_ADDR']. Cependant, si votre application Django est déployée derrière un proxy inverse, l'en-tête REMOTE_ADDR peut ne pas contenir la véritable adresse IP de l'utilisateur.

Pour résoudre ce problème, Django fournit la fonction d'assistance get_client_ip. Cette fonction vérifie l'en-tête HTTP_X_FORWARDED_FOR, qui est couramment utilisé par les proxys inverses pour indiquer l'adresse IP d'origine du client. Si cet en-tête est présent, la fonction renvoie la première adresse IP de la liste. Sinon, il revient à l'en-tête REMOTE_ADDR.

Voici comment utiliser la fonction get_client_ip :

<code class="python">def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip</code>

Assurez-vous que votre proxy inverse est correctement configuré pour que la fonction get_client_ip fonctionne correctement. Par exemple, pour Apache, vous devrez peut-être installer le module mod_rpaf.

Une fois que vous aurez implémenté la fonction get_client_ip, vous pourrez récupérer l'adresse IP de l'utilisateur en passant l'objet request en argument :

<code class="python">ip_address = get_client_ip(request)</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn