解决宝塔面板反向代理后无法显示真实IP的问题

在使用宝塔面板时,如果设置了反向代理访问面板,可能会遇到一个问题:面板无法记录用户的真实IP,只能记录到反代服务器的IP。
解决宝塔面板反向代理后无法显示真实IP的问题
type
status
date
slug
summary
tags
category
icon
password
📌
在使用宝塔面板时,如果设置了反向代理访问面板,可能会遇到一个问题:面板无法记录用户的真实IP,只能记录到反代服务器的IP。
这是因为在反向代理的情况下,用户的真实IP会被隐藏在HTTP头信息中,而不是直接通过 request.remote_addr 获取。

问题描述

原始的获取客户端IP的代码(约780行)如下:
这种方式只能获取到反代服务器的IP,而不是用户的真实IP。

解决方案

为了获取用户的真实IP,我们需要检查HTTP头信息中的 X-Forwarded-For 和 X-Real-IP 字段。这些字段通常由反向代理服务器添加,包含了用户的真实IP地址。
以下是改进后的代码:
然后命令行重启宝塔面板即可

代码解释

  1. 获取初始IP地址:首先通过 request.remote_addr 获取初始IP地址,并去掉可能存在的 ::ffff: 前缀。
  1. 检查HTTP头信息:然后检查 X-Forwarded-For 和 X-Real-IP 头信息。如果 X-Forwarded-For 存在,取第一个IP地址(多个IP地址用逗号分隔);否则,如果 X-Real-IP 存在,取其值。
  1. 验证IP地址:最后,通过 check_ip 函数验证IP地址的有效性。如果无效,返回 '未知IP地址'。

总结

通过上述改进,我们可以在宝塔面板设置了反向代理的情况下,正确记录用户的真实IP地址。这对于日志记录和安全审计非常重要。希望这篇博客能帮助到遇到同样问题的开发者。
上一篇
浅谈JavaScript闭包
下一篇
群晖Docker安装部署自托管AppFlowy笔记应用
Loading...
发布于 2024-12-20
修改于 2024-12-20
最新发布
解决宝塔面板反向代理后无法显示真实IP的问题
2024-12-20
群晖Docker安装部署自托管AppFlowy笔记应用
2024-12-14
PostgreSQL配置Fail2Ban防暴力破解
2024-11-19
PVE配置Fail2Ban防暴力破解Web登录与SSH连接
2024-11-19
单臂路由|N1盒子(OpenWRT)单线多拨实现网速叠加
2024-11-18
关于Sass 你需要知道的 Interpolation(插值)
2024-11-17