From 7c5aff63451987fdb15c32f8f310f6b2e869103a Mon Sep 17 00:00:00 2001 From: xiaji Date: Sat, 13 Jun 2026 19:12:23 +0800 Subject: [PATCH] =?UTF-8?q?debug:=20=E4=B8=B4=E6=97=B6=E5=8A=A0=20stderr?= =?UTF-8?q?=20log=20=E7=9C=8B=20IP=20=E6=8F=90=E5=8F=96=20+=20touch=5Fip?= =?UTF-8?q?=20=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/services/active_ip.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/backend/app/services/active_ip.py b/backend/app/services/active_ip.py index cbbefa0..77792ac 100644 --- a/backend/app/services/active_ip.py +++ b/backend/app/services/active_ip.py @@ -43,18 +43,23 @@ def get_client_ip(request: Request) -> str: 仅在配置 trust_x_forwarded_for=True 时信任 1+2,否则只用 3。 """ + import sys + xff_raw = request.headers.get("x-forwarded-for") + xri_raw = request.headers.get("x-real-ip") + client_host = request.client.host if request.client else None + print(f"[GET_CLIENT_IP] xff={xff_raw!r} xri={xri_raw!r} client_host={client_host!r} trust={settings.trust_x_forwarded_for}", file=sys.stderr, flush=True) if settings.trust_x_forwarded_for: - xff = request.headers.get("x-forwarded-for") + xff = xff_raw if xff: - # 取第一个(原始客户端),可能形如 "1.2.3.4, 10.0.0.1" ip = xff.split(",")[0].strip() if ip: + print(f"[GET_CLIENT_IP] -> use xff split[0] = {ip!r}", file=sys.stderr, flush=True) return ip - xri = request.headers.get("x-real-ip") + xri = xri_raw if xri: return xri.strip() - if request.client and request.client.host: - return request.client.host + if client_host: + return client_host return "unknown" @@ -76,6 +81,8 @@ async def check_or_register_login_ip(ip: str) -> None: 注意:不限制 owner/非 owner(整个站点一个池,所有用户共享) """ + import sys + print(f"[CHECK] ip={ip!r} limit={limit}", file=sys.stderr, flush=True) r = get_redis() now = int(time.time()) limit = settings.site_max_active_ips @@ -159,7 +166,13 @@ async def touch_ip_dependency(request: Request) -> None: 不会失败(吞掉异常),避免 Redis 抖动影响正常请求。 """ try: + import sys ip = get_client_ip(request) + # 临时诊断:看实际 IP 提取 + xff = request.headers.get("x-forwarded-for") + xri = request.headers.get("x-real-ip") + client_host = request.client.host if request.client else None + print(f"[TOUCH_DEP] ip={ip!r} xff={xff!r} xri={xri!r} client_host={client_host!r}", file=sys.stderr, flush=True) await touch_active_ip(ip) except Exception as e: # noqa: BLE001 logger.debug("touch_active_ip failed (ignored): %s", e)