使用frp穿透后,后端获取到的IP地址变成了frpc的IP,而且nginx的日志里的IP也是frpc的IP,给日志审计带来了很大的麻烦。使用如下方法可以获得访客的真实IP:
首先修改frpc的配置,在http或https隧道中添加一行:
proxy_protocol_version = v2
此处写v1或v2均可(你的服务器支持v2的前提下),且建议最好使用v2。
接着nginx的配置文件server字段的listen xx后面添加proxy_protocol。例如:
listen 80;
listen 443 ssl http2;
应改为
listen 80 proxy_protocol;
listen 443 ssl http2 proxy_protocol;
最后在server字段里添加
real_ip_header proxy_protocol;
real_ip_recursive on;
set_real_ip_from 127.0.0.1;
注意127.0.0.1是frpc的ip,如果你的frpc安装到了局域网的其他主机,则需要修改为正确的ip。如果此处ip设置不正确,获取到的用户ip将仍为frpc的ip。
最后重载nginx,重启frpc,nginx日志中的ip和php获取到的ip应该均为客户端的公网ip了。