如题,使用 FRP 内网穿透部署了服务器,使用良好,但最近发现有部分基于 IP 的功能出现了异常。
排查后发现是 FRP 内网穿透导致的(原因是访客访问域名后,请求会经过 FRP 服务器周转到本地服务器的 127.0.0.1 地址上),导致网站程序获取的 IP 都是内网的 127.0.0.1,因此导致了错误的发生(我使用的是 Nginx 服务器)。
访问了作者的 github 项目,希望能够找到解决方案,有是有,但写的比较模糊,不太看得懂,连接地址如下: https://github.com/fatedier/frp/blob/master/README_zh.md#%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E7%9C%9F%E5%AE%9E-ip
请问有没有朋友也碰到过类似的问题?是否有良好的解决方案,谢谢~
1
billchenchina 2018-07-28 00:38:42 +08:00 via Android
这个功能当时是我提出来的,这里做一下解释
为了获取访客的真实 ip,需要进行以下操作 frp 监听随机(自定)端口,用户访问的时候用 nginx 套反代,header 里面加上用户的真实 ip ( X-Forwarded-For )和一个自定的 token。 在自己的站点获取用户 ip 的时候做出的改动: 1. 检查 token 是否被设置且是否正确,如果没有被设置说明一定不来自 frp,这时的流量可以看作直接访问的流量,可以忽略掉或者保存真实 ip 2. 如果 token 正确的话,则信任 header 里面的 X-Forwarded-For,把这个当做用户真实 ip |
2
t6attack 2018-07-28 01:06:37 +08:00
用 nginx 反向代理做负载均衡后,会遇到类似问题。
你以关键词 “ nginx 负载均衡 真实 IP ” 搜索。就能搜到相关信息了。 |
3
line 2018-07-28 01:38:56 +08:00 via iPhone
tcp 协议也可以吗?
|
4
29EtwXn6t5wgM3fD 2018-07-28 08:40:43 +08:00 via iPhone
插个统计服务的 js 吧
|
5
mostkia OP |
6
mostkia OP 已经解决,但效果可能不太理想,后来恢复回滚到原来的样子了。。有需要的朋友依旧可以参考一下:
1,frp 端口要事先改为非 80 和 443 以免和 nginx 冲突,比如 8080 端口。 2,在 frp 前台服务器安装 nginx,然后再 frp 前套一个 nginx 反代,把证书和域名什么的都先绑定到前台服务器上,然后前台服务器全部将流量反代到 frp 的转发端口 127.0.0.1:8080 端口上,这样就能够拿到 ip 了,原理不太懂,但是貌似会降低速度。 @t6attack @billchenchina |
7
mostkia OP 缺点:
1,两个 nginx(我内网的 web 服务器也是 nginx),配置 冗余分散不好管理,而且容易出错。 2,速度变慢,原因可能和反代有关。 3,ie 浏览器莫名无法访问,原因未知,比较玄学的一 个问题,可能下一位尝试者就不会碰到。 不过貌似目前现有的资料都是类似的解决方案,还是希望作者能早日填坑吧。 |
8
qingyuan0o0 2019-11-12 16:30:55 +08:00
提交外网获取到的 ip 为表单提交到 server,可行不?
|