环境:
还是先介绍一下环境:
本站是在docker安装的WP,众所周知WP是apache服务器,
内网穿透是frp,众所周知frp的https会丢失用户真实ip,
实不相瞒,本站为了装逼目的,是会收集用户IP的。
方法介绍(apache):
众所又周知,frp在这个问题上是有解决方案的,就是proxy_protocol_version 是由 HAProxy 开发者 Willy 提出的一种反向代理协议。
即在命令行
1
vi /usr/local/frpc_0.35/frpc.ini //进入frpc的配置文件
2
proxy_protocol_version = v2 //在对应的隧道下添加这句话,http和https都添加
3
【esc】-【:wq】退出并且重启frpc
进入wp的docker容器
1
docker exec -it wp /bin/bash //进入wp容器
2
apache2 -v //查看apache版本,2.4.56记得apache版本只有在2.4.30以上才支持
3
a2enmod remoteip //如果你apache正常安装,应该可以开启这个模块,启用 mod_remoteip 模块
4 //找到这段,这是80端口的配置
<VirtualHost *:80>
...
# 新增此行
RemoteIPProxyProtocol On
</VirtualHost>
5 //找到这段,这是443端口的配置
<VirtualHost *:443>
...
# 新增此行
RemoteIPProxyProtocol On
</VirtualHost>
6
方法介绍(nginx):
在做好上面frp的配置后。
nginx需要启用 Proxy Protocol 的 server 块找到 listen 字段,并在尾部(分号前面)添加用空格分开的 proxy_protocol
修改之前:
server {
listen 80;
listen 443 ssl;
# 反向代理
location ... {
# 原有内容
proxy_pass ...;
}
# FastCGI
location ... {
# 原有内容
fastcgi_pass ...;
}
}
修改之后:
server {
listen 80 proxy_protocol;
listen 443 ssl proxy_protocol;
# 反向代理
location ... {
proxy_set_header X-Real-IP $proxy_protocol_addr;
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
# 原有内容
proxy_pass ...;
}
# FastCGI
location ... {
fastcgi_param HTTP_X_REAL_IP $proxy_protocol_addr;
fastcgi_param HTTP_X_FORWARDED_FOR $proxy_protocol_addr;
# 原有内容
fastcgi_pass ...;
}
}
nginx就配置完了。
总结:
如果frp和(apache/nginx)有一方没配置好,就重启,大概率会无法访问网站。