Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erhalte ich die IP-Adresse eines Benutzers in Django mit Reverse-Proxys genau?

Wie erhalte ich die IP-Adresse eines Benutzers in Django mit Reverse-Proxys genau?

DDD
DDDOriginal
2024-11-05 08:08:02393Durchsuche

How to Accurately Obtain a User's IP Address in Django with Reverse Proxies?

Django: Benutzer-IP-Adresse abrufen

Problem:

Beim Versuch, die IP-Adresse des Benutzers abzurufen, tritt ein KeyError auf unter Verwendung von request.META['REMOTE_ADDR'].

Analyse:

Die von request.META['REMOTE_ADDR'] zurückgegebene Remote-Adresse ist möglicherweise nicht die tatsächliche Benutzer-IP wenn ein Reverse-Proxy beteiligt ist.

Lösung:

Um die IP-Adresse des Benutzers genau zu erhalten, befolgen Sie diese Schritte:

  1. Definieren Sie a Dienstprogrammfunktion zum Abrufen der 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>
  1. Ersetzen Sie Ihren vorherigen Code durch:
<code class="python">client_ip = get_client_ip(request)</code>

Überlegungen:

  • Stellen Sie sicher, dass Ihr Reverse-Proxy (z. B. mod_rpaf für Apache) korrekt konfiguriert ist.
  • Verwenden Sie in den meisten Fällen das erste Element in X-Forwarded-For.
  • Achtung:In bestimmten Setups (z. B. Heroku) müssen Sie möglicherweise stattdessen das letzte-Element verwenden.
  • Um die HttpRequest.META zu erhalten Dokumentation in Django finden Sie in der offiziellen Dokumentation.

Das obige ist der detaillierte Inhalt vonWie erhalte ich die IP-Adresse eines Benutzers in Django mit Reverse-Proxys genau?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn