先说下我的环境是win11,使用wsl2 安装了 Ubuntu 22.04.1 LTS, 今天更新了宝塔11.2.0后出现了Internal Server Error,更新和修复面板都没用, 查了一下错误日志,发现是AttributeError: 'NoneType' object has no attribute 'split'
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/www/server/panel/pyenv/lib/python3.7/site-packages/flask/app.py", line 2529, in wsgi_app
- response = self.full_dispatch_request()
- File "/www/server/panel/pyenv/lib/python3.7/site-packages/flask/app.py", line 1825, in full_dispatch_request
- rv = self.handle_user_exception(e)
- File "/www/server/panel/pyenv/lib/python3.7/site-packages/flask/app.py", line 1669, in handle_user_exception
- return self.handle_http_exception(e)
- File "/www/server/panel/pyenv/lib/python3.7/site-packages/flask/app.py", line 1609, in handle_http_exception
- return self.ensure_sync(handler)(e)
- File "/www/server/panel/BTPanel/__init__.py", line 381, in error_404
- return public.error_not_login()
- File "class/public.py", line 5755, in error_not_login
- client_status = check_client_info()
- File "class/public.py", line 8272, in check_client_info
- remote_addr = get_client_ip()
- File "class/public.py", line 834, in get_client_ip
- return GetClientIp()
- File "class/public.py", line 807, in GetClientIp
- forwarded_ips = request.headers.get('X-Forwarded-For').split(',')
- AttributeError: 'NoneType' object has no attribute 'split'
复制代码
临时解决方案:
先备份,然后找到\www\server\panel\class\public.py 的 GetClientIp 方法
直接覆盖
def GetClientIp():
from flask import request
ipaddr = request.remote_addr
if ipaddr:
ipaddr = ipaddr.replace('::ffff:', '')
if ipaddr in ('127.0.0.1', '::1', "localhost"): # 仅信任本地代理,在本地代理时,认为是开启了免端口访问
x_forwarded_for = request.headers.get('X-Forwarded-For')
if x_forwarded_for: # 添加检查,确保 X-Forwarded-For 不为 None
forwarded_ips = x_forwarded_for.split(',')
if len(forwarded_ips) > 0:
ipaddr = forwarded_ips[-1]
elif "X-Real-Ip" in request.headers:
ipaddr = request.headers.get('X-Real-Ip')
if not isinstance(ipaddr, str):
return '未知IP地址'
ipaddr = ipaddr.replace('::ffff:', '')
if not check_ip(ipaddr): return '未知IP地址'
return ipaddr
|
|