因为我的博客一直放在本地设备上边,然后使用的是Frp穿透出去,这样造成了外部访问的时候,返回来的都是内网IP在访问,也就造成了在使用Access插件的时候,在后台控制页面显示的访问IP全是设备的内网IP(如下图),其实影响也不大,我也没太在意这个。不过今天偶然间看到有人在说这个问题,然后发现解决这个问题其实很简单,只需要在frp里增加一个Proxy Protocol协议就可以了。

Frpc配置

这个非常简单,根据官方文档的说明

只需要在代理配置中增加一行 proxy_protocol_version = v2 即可开启此功能。

1
2
3
4
5
6
7
8
# frpc.ini
[web]
type = https
local_port = 443
custom_domains = test.yourdomain.com

# 目前支持 v1 和 v2 两个版本的 proxy protocol 协议。
proxy_protocol_version = v2

然后在Nginx里边配置一下就可以了。

Nginx配置

同样根据官方文档的说明

本地的 HTTPS 服务可以通过在 nginx 的配置中启用 Proxy Protocol 的解析并将结果设置在 X-Real-IP 这个 Header 中就可以在自己的 Web 服务中通过 X-Real-IP 获取到用户的真实 IP

这里只需在监听的端口后边加上Proxy Protocol并设置好real_ip及其header就可以了。

1
2
3
4
5
6
7
8
server
{
listen 80 proxy_protocol;
listen 443 ssl http2 proxy_protocol;
...
set_real_ip_from x.x.x.x/x; # em:set_real_ip_from 192.168.1.0/24;
real_ip_header proxy_protocol;
}

最后重启NginxFrpc服务就可以了。

之后就能正常获取到访问的真实IP了(如下图)。