mollid 发表于 2025-10-30 10:50:13

【已解答】更新Linux面板11.2.0后,出现Internal Server Error

先说下我的环境是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




阿珂 发表于 2025-10-30 14:11:29

命令行bt 16 修复至最新版即可
页: [1]
查看完整版本: 【已解答】更新Linux面板11.2.0后,出现Internal Server Error