Skip to content

Commit 9db6c60

Browse files
committed
[fix]修复nignx反向代理后无法获取用户真实ip的bug
1 parent fc828ba commit 9db6c60

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

puredrf/settings.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@
3434
# SECURITY WARNING: don't run with debug turned on in production!
3535
DEBUG = env.bool("DEBUG", default=False)
3636

37+
# nginx反向代理设置
38+
USE_X_FORWARDED_HOST = env.bool("USE_X_FORWARDED_HOST", default=False)
39+
if USE_X_FORWARDED_HOST:
40+
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
41+
3742
ALLOWED_HOSTS = env.list("ALLOWED_HOSTS", default=["localhost"])
3843

3944

utils/request_util.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@ def get_request_user(request):
3232
def get_request_ip(request):
3333
"""
3434
获取请求IP
35-
:param request:
36-
:return:
35+
:param request: Django request 对象
36+
:return: 客户端真实 IP 地址
3737
"""
3838
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR', '')
3939
if x_forwarded_for:
40-
ip = x_forwarded_for.split(',')[-1].strip()
40+
# 获取第一个非空的 IP
41+
ip = x_forwarded_for.split(',')[0].strip()
4142
return ip
43+
# 如果 X-Forwarded-For 为空,则使用 REMOTE_ADDR
4244
ip = request.META.get('REMOTE_ADDR', '') or getattr(request, 'request_ip', None)
4345
return ip or 'unknown'
4446

0 commit comments

Comments
 (0)