说到实现真实IP,之前我用nginx反向代理实现过(点此了解)。操作略微复杂,而且服务端还要求安装nginx,并配置nginx。
我的环境还是那样——通过FRP内网穿透本地lnmp环境。如果是这种情况的话,这应该是最简单实现真实IP的方法——proxy_protocol协议。最先了解的就是这个,可一直没搞明白,搁置了。今天终于搞明白了。
proxy_protocol协议是什么?网上一大堆了,我折腾这么多年,搜了好几个搜索引擎的资料,看最多的就是proxy_protocol的介绍。具体是什么呢?我也不大清楚,反正他能让后端获取客户端的网络信息,也就是IP地址以及TCP端口。它有两种格式——v1和v2,当然现在用的最多的是v2了。
而FRP用proxy_protocol最简单,在穿透的隧道后面加上“proxy_protocol_version = v2”即可。譬如:
[liuyuanlin_https]
# 配置 http 访问
type = https
# 本地 Web 服务的端口(与前面的配置一样,都对应同一个 Web 服务)
local_port = 443
# 需要反向代理的域名(当访客通过此域名访问 A 机器时,才会将请求反向代理到此 Web 服务)
custom_domains = liuyuanlin.com, www.liuyuanlin.com
use_encryption=true
use_compression=true
proxy_protocol_version = v2
注意的是,不要再加https2http、https2https这类插件了,因为这类插件就好比nginx的反向代理,会出现502错误。此时你打开网站会出现“ERR SSL PROTOCOL ERROR”的错误,这说明此站流量在走proxy_protocol协议。是正常的。
然后我们配置后端nginx:
server{
......
#listen 端口后面加上proxy_protocol字段,开启Proxy Protocol协议
listen 12443 ssl http2 proxy_protocol;
listen [::]:12443 ssl http2 proxy_protocol;
......
#proxy_protocol协议头部真实IP
real_ip_header proxy_protocol;
real_ip_recursive on;
set_real_ip_from 127.0.0.1;
set_real_ip_from 内网IP,公网IP;
#需要排除的IP,如果你有CDN,可以再加
...
#SSL ON
此处为SSL证书信息,必须得有;
#SSL END
}
然后重启nginx和frpc服务,搞定!这样默认的REMOTE_ADDR记录的就是客户端的IP了。也不用在wp-config.php多余的配置了。你可以将下面代码保存为.php文件,来测试客户端IP。
<?php
$REMOTE_ADDR = $_SERVER['REMOTE_ADDR']; // 客户端与服务器握手IP,如果使用代理则会获取到代理IP
$HTTP_CLIENT_IP = $_SERVER['HTTP_CLIENT_IP']; // 代理服务器发送的HTTP头(可伪造)
$HTTP_X_FORWARDED_FOR = $_SERVER['HTTP_X_FORWARDED_FOR']; // 用户是在哪个IP使用的代理(可伪造)
$X_Real_IP = $_SERVER['X-Real-IP'];
echo 'REMOTE_ADDR'.$REMOTE_ADDR.'<br/>';
echo 'HTTP_CLIENT_IP'.$HTTP_CLIENT_IP.'<br/>';
echo 'HTTP_X_FORWARDED_FOR'.$HTTP_X_FORWARDED_FOR.'<br/>';
echo 'X_Real_IP'.$X_Real_IP.'<br/>';
?>
总之呢,现在你不用花昂贵的价钱买阿里云、腾讯云、天翼云、京东云服务器了,只需要花十分之一的价钱买FRP服务或者免费的FRP服务就可以穿透自己本地搭建的网站了。
在此,感谢FRP、老朱、alain lam、军哥LNMP以及网络肯分享技术的大佬们!希望此文可以帮助曾经跟我一样糊涂的童鞋们。
本文链接: 通过proxy_protocol协议实现真实IP
技术达人
1年前 · 昆明 · Firefox 118 Windows 10
@sagrre 呵呵,只是想简单实现想要的功能而已。内网穿透挺适合你的,不要求备案,还省钱,只需要家里常年在线的电脑即可,配置不要求多高,用免费的frp服务,只需要交点电费和网费就行了。
1年前 · 合肥 · Firefox 118 Windows 10
感觉有难度目前不知道怎么开始,需要添加其他配件吗?常年在线电脑这个倒是不难
1年前 · 昆明 · Firefox 118 Windows 10
@sagrre 非常简单。电脑上安装lnmp环境,直接在Windows安装也行,用VMware虚拟机也行,Windows推荐宝塔Windows版本、phpenv,Linux推荐LNMP,宝塔Linux版,然后用frp穿透,我记得你公网服务器还有好几年到期,可以直接用你的服务器,不能浪费嘛!frp需要配置,其实也很简单,如果你着手做起来,到时候针对你的站,我把配置写好发邮件给你
1年前 · 合肥 · Firefox 118 Windows 10
@sagrre 不需要其他配件,只需要电脑、电、网!
1年前 · 合肥 · Firefox 118 Windows 10
@皇家元林 那真适合我这两天我研究研究,新买了域名懒得备案试试看
1年前 · 昆明 · Firefox 118 Windows 10
完美解决了问题,真棒!
1年前 · 嘉兴 · Google Chrome 86 Windows 10
@profan 确实,这下才是真的完美了!
1年前 · 合肥 · Firefox 118 Windows 10
这个不用备案吗?不备案使用的是香港服务器吧?元林兄弟你网站是备案的使用的也是阿里云呀,你是购买了阿里云服务器自己做的frp穿透是吧?这方面的教程可以详细写写,我现在买两个服务器做的三个网站,以后可以少买一个用自己的电脑做了。以前也用免费的frp试过,还花了百来元买过他们付费服务,可是不稳定没法用起来,后来就放弃了。
跟电费这些比起来,活动期间买的服务器也不算贵了,不过配置确实太差了,2H2G或4G也不时会有问题。
1年前 · 邵阳 · Microsoft Edge 117 Windows 10
@墨铺网 是的,国内所有主机都是需要备案的。
我的意思是,可以直接用frp服务,而不需要阿里云这样服务器,当然你有条件用服务器更好了。你这配置已经很好了,frp不要求配置多好,只要带宽足就很快!
关于frp的教程我已经写了好几篇了,也是记录我的折腾过程。本地搭建服务器,备份非常方便,速度快。即使公网服务关了,也一点不影响你本地的数据。
另外现在老用户阿里云的服务器续费还是购买都很贵,要不是我舍不得我的备案,我早弃了。
1年前 · 合肥 · Firefox 118 Windows 10
我腾讯云服务器都是CentOS,安装的没界面,操作上面不熟悉,这两天新开了一台win服务器在折腾,还是没搞明白,在服务器的设置7500查看状态已经成功了,也能显示客户端有连接,但域名访问打不开,下载的也是frp_0.53.2版本的,可能跟网上的教程有差异。
,只能找元林哥帮写个配置啦
CentOS全代码的不好上手,我前面建站都是通过宝塔操作的。可能需要学会使用后,老服务器也要装win
想要实现的还挺多的,需要支持https,还有本地客户端要能做多个网站,不知道是不是开几个客户端来实现的呢?
ok99668@qq.com这个邮箱更常用些,然后帮我跟客户端也一起发吧,老版本的ini,新版本toml,有些区别的好像。
11个月前 · 邵阳 · Microsoft Edge 120 Windows 10
非常感谢元林老哥,刚使用域名已经可以安装wp了,多谢详细指导!
11个月前 · 邵阳 · Microsoft Edge 120 Windows 10
@墨铺网 不用客气!力所能及的事情!成功了就行!
11个月前 · 安徽 · Wordpress App 23 iPhone iOS 16.6.1
ssh的端口可以过去好获取到真实ip吗?
2个月前 · 南京 · Unknown Unknown
@萌孩子 你这个用法倒是不常见,如果是走 proxy_protocol 协议是可以获取真实 IP 的。
2个月前 · 合肥 · Wordpress App 25 iPhone iOS 17.6.1