Django 如何獲取真實遠程客戶端IP


問題簡述

我們知道HttpRequest.META字典包含所有HTTP頭部信息(可用的頭部信息取決於客戶端和服務器)。一般情況下,HttpRequest.META.get('REMOTE_ADDR')一句代碼就能獲取到你想要的客戶端IP。然而,如果部署了代理服務器等原因,就會導致得到的IP並不是真實的客戶端IP。那么如何才能獲取到真實的遠程客戶端IP呢?

解決方法參考

1.自定義中間件

假如代碼文件路徑為“custbase.http.SetRemoteAddrFromForwardedFor”。

from django.utils.deprecation import MiddlewareMixin

class SetRemoteAddrFromForwardedFor(MiddlewareMixin):
    """
    如果部署了代理,使用此中間件獲取遠程客戶端IP。
    在settings中注冊該中間件。
    """
    def process_request(self, request):
        try:
            real_ip = request.META['HTTP_X_FORWARDED_FOR']    # 關鍵一行 except KeyError as err:
            print(err)
        else:
            real_ip = real_ip.split(",")[0]
            request.META['REMOTE_ADDR'] = real_ip

2.注冊中間件

在settings.py中注冊上述自定義的中間件。

# 中間件
MIDDLEWARE = [
    ...
    'custbase.http.SetRemoteAddrFromForwardedFor',
]

3.使用

在程序中重新使用字典HttpRequest.META。

...
remote_ip = request.META.get('REMOTE_ADDR', '獲取IP失敗')
...

 

  至此。轉載請注明出處。

本站相關鏈接:>>Django部署 ]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM