apache+frp获取真实ip
apache+frp获取真实ip

apache+frp获取真实ip

环境:

还是先介绍一下环境:

本站是在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)有一方没配置好,就重启,大概率会无法访问网站。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

正在获取,请稍候...
00:00/00:00