1Panel + FRP 内网穿透建站遇到的问题
前言:这两天我朋友打算迁移他的博客到内网。这我当然要推荐1Panel和Halo了。于是在我的强烈推荐下,我朋友入手了1Panel 和 Halo的专业版。由于我朋友使用的是FRP进行内网穿透,遇到了一点小问题找我帮忙解决,我顺便也记录一下。
1. 文章无法发布
这个小意思啦,WAF设置一下就好了。
2. 当部署到公网后,发现无法登录Halo控制台。
这里就求助我了,我看了一下登录请求,返回500. 提示未知错误。我心想,这不就是WAF的问题吗,于是又去帮他弄WAF规则,结果很显然 不行。不然也不会有这一条了。
具体步骤:
- 关闭WAF规则中的 SQL 注入 XSS防御 参数规则。无法登录
- 关闭当前网站的WAF功能。 无法登录
- 关闭WAF功能总开关。成功登录
你不会以为到这就结束了吧,我当然不甘心。到底是哪里出问题了呢。
于是我本地搭了环境开始测试,非常明显刚搭好用FRP完成穿透就无法登录了。
这次没有关闭WAF 直接去看网站日志。
发现请求全部都是127.0.0.1而不是我访问的真实IP 这个很正常 FRP 都这样。
看错误日志。果然让我找到了端倪看下面的报错
2024/04/29 00:20:54 [error] 853#853: *715034 lua entry thread aborted: runtime error: ./waf.lua:148: Expected value but found invalid token at character 1
stack traceback:
coroutine 0:
[C]: in function 'decode'
./waf.lua:148: in function 'waf_api'
./waf.lua:172: in main chunk, client: 127.0.0.1, server: halo.broue.cn, request: "POST /login HTTP/1.1", host: "halo.broue.cn", referrer: "https://halo.broue.cn/console/login?login-type=password"
很明显 报错还是WAF的问题。最近1Panel刚发布专业版 问题还是蛮多的。
到这里问题就结束了该去给1Panel提issues了。
当然 还有一种解决方案。这个就刚好涉及到上面提到的一个问题了。那就是如何获取用户真实ip
不能打开日志一瞧全部都是127.0.0.1吧。
3. FRP内网穿透获取用户真实IP
解决方案。
在OpenResty配置文件中的 http 块添加下面两行,这个是获取CDN真实IP的方法。到这里也是同样的。
这两行代码是Nginx配置中的两个指令,用于获取用户的真实IP地址。
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
:这个指令设置了允许从哪些IP地址范围获取真实IP。在这里,0.0.0.0/0
表示允许从任何IP地址获取真实IP。实际上,这个值可以根据实际情况进行修改,例如只允许从本地局域网内的IP地址获取真实IP。real_ip_header X-Forwarded-For;
:这个指令指定了从哪个HTTP头部字段获取真实IP。在这里,X-Forwarded-For
是一个常见的头部字段,用于表示客户端的真实IP地址。当客户端通过代理服务器访问时,代理服务器会在请求头中添加一个名为X-Forwarded-For
的字段,其中包含了客户端的真实IP地址。因此,通过设置这个指令,Nginx可以从X-Forwarded-For
头部字段中获取到用户的真实IP。
按照上面的配置后。服务器就可以获取到客户端的真实IP了。当然 X-Forwarded-For
是可以伪造的,针对一些场景需要做其他的方式来获取用户真实ip 这里不做讨论。
很巧的是 这样配置后 上面遇到的无法登录的问题也解决了
参与讨论