debug: 临时加 stderr log 看 IP 提取 + touch_ip 调用
This commit is contained in:
@@ -43,18 +43,23 @@ def get_client_ip(request: Request) -> str:
|
|||||||
|
|
||||||
仅在配置 trust_x_forwarded_for=True 时信任 1+2,否则只用 3。
|
仅在配置 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:
|
if settings.trust_x_forwarded_for:
|
||||||
xff = request.headers.get("x-forwarded-for")
|
xff = xff_raw
|
||||||
if xff:
|
if xff:
|
||||||
# 取第一个(原始客户端),可能形如 "1.2.3.4, 10.0.0.1"
|
|
||||||
ip = xff.split(",")[0].strip()
|
ip = xff.split(",")[0].strip()
|
||||||
if ip:
|
if ip:
|
||||||
|
print(f"[GET_CLIENT_IP] -> use xff split[0] = {ip!r}", file=sys.stderr, flush=True)
|
||||||
return ip
|
return ip
|
||||||
xri = request.headers.get("x-real-ip")
|
xri = xri_raw
|
||||||
if xri:
|
if xri:
|
||||||
return xri.strip()
|
return xri.strip()
|
||||||
if request.client and request.client.host:
|
if client_host:
|
||||||
return request.client.host
|
return client_host
|
||||||
return "unknown"
|
return "unknown"
|
||||||
|
|
||||||
|
|
||||||
@@ -76,6 +81,8 @@ async def check_or_register_login_ip(ip: str) -> None:
|
|||||||
|
|
||||||
注意:不限制 owner/非 owner(整个站点一个池,所有用户共享)
|
注意:不限制 owner/非 owner(整个站点一个池,所有用户共享)
|
||||||
"""
|
"""
|
||||||
|
import sys
|
||||||
|
print(f"[CHECK] ip={ip!r} limit={limit}", file=sys.stderr, flush=True)
|
||||||
r = get_redis()
|
r = get_redis()
|
||||||
now = int(time.time())
|
now = int(time.time())
|
||||||
limit = settings.site_max_active_ips
|
limit = settings.site_max_active_ips
|
||||||
@@ -159,7 +166,13 @@ async def touch_ip_dependency(request: Request) -> None:
|
|||||||
不会失败(吞掉异常),避免 Redis 抖动影响正常请求。
|
不会失败(吞掉异常),避免 Redis 抖动影响正常请求。
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
|
import sys
|
||||||
ip = get_client_ip(request)
|
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)
|
await touch_active_ip(ip)
|
||||||
except Exception as e: # noqa: BLE001
|
except Exception as e: # noqa: BLE001
|
||||||
logger.debug("touch_active_ip failed (ignored): %s", e)
|
logger.debug("touch_active_ip failed (ignored): %s", e)
|
||||||
|
|||||||
Reference in New Issue
Block a user