简介

今天突然发现我的网站获取不到真实的访客地址了,后面想了一下大概率是frp的原因,因为之前是可以获取的,最近才不行的,但是最近就只更新过frp,所以大概率是frp

后面就在各个论坛里面翻了一下,终于解决了

网络结构

先说说我的网络结构

我的网站服务器是在家里面的,没有ipv4的公网ip,是使用的内网穿透(frp)映射出去的

我在云服务器上装了一个nginx和一个frps,使用frps来进行内网穿透,使用nginx来进行反向代理和ssl证书

本地服务器的前面有一个openwrt软路由,frpc是在软路由上的

解决方法

Opnwrt设置

首选需要在软路由上的frpc上设置,需要打开Proxy-Protocol,版本可以选V2或者是V1

1.png

如果你的frpc不是我这种在软路由上可以ui界面配置的,是需要改配置文件的,那么就在frpc的配置文件里面加下面这个代码

proxy_protocol_version = v2

这个代码是加在http隧道或者是https隧道里面的,例如

# frpc.toml
transport.tls.enable = true     # 从 v0.50.0版本开始,transport.tls.enable的默认值为 true
serverAddr = "x.x.x.x"
serverPort = 7000               # 公网服务端通信端口

auth.token = "public"           # 令牌,与公网服务端保持一致

[[proxies]]
name = "web"
type = "http"
proxy_protocol_version = v2
localIP = "127.0.0.1"
localPort = 80
customDomains = ["www.smzzt.top"]

修改完成后保存

修改网站的nginx配置文件

这里需要修改的是网站的nginx的配置文件,就是家里面的服务器的nginx配置文件

第一处修改

需要在server字段的listen xx后面添加proxy_protocol

例如原本的是

server
{
    listen 80;
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    listen [::]:80;
    ......后面配置省略
}

修改后是

server
{
    listen 80 proxy_protocol;
    listen 443 ssl http2 proxy_protocol;
    listen [::]:443 ssl http2;
    listen [::]:80;
    ......后面配置省略
}

正常情况下只有下面这两行

listen 80;
listen 443 ssl http2;

但是我的多了下面这两行

listen [::]:443 ssl http2;
listen [::]:80;

多出来的这两行是IPV6的,我的网站开启了IPV6,所以多出来了这两行,这两行不用管

第二处修改

继续修改同一个nginx配置文件,在在server字段里最后添加下面代码

real_ip_header proxy_protocol; 
real_ip_recursive on; 
set_real_ip_from 192.168.99.1;

这上面的代码里面有192.168.99.1这个地址,这个地址是frpc所在的设备的地址,如果你的frpc是和网站在同一个设备中的话就改成127.0.0.1,如果网站和frpc不是同一个设备那么就改成frpc所在的设备的地址

完成

完成上面的改动后,重启服务器或者是重载nginx配置,之后就会发现可以获取到真实的访客地址了


发表评论

已有 10 条评论

  1. 用frp来进行内网穿透的时候,ftp不成功是怎么回事呢?(默认21端口)
    其他的端口可以正常

    1. @逸仙

      看一下是不是端口占用之类的

      1. @king

        应该没有,在局域网内可以访问

        1. @逸仙

          防火墙呢?看过没有

          1. @king

            防火墙全关了,服务器端客户端的

            1. @逸仙

              21端口是ftp的,很多地方的运营商会关闭这个端口

              1. @king

                好的,谢谢,我去看看

                1. @逸仙

                  没事,不客气

              2. @king

                我改了2121端口还是不行
                这是报错
                https://upyun.525866.xyz/temporarily/2.png
                在浏览器是设置里关闭这个选项后报错会改变,但是还无法访问
                https://upyun.525866.xyz/temporarily/1.png
                https://upyun.525866.xyz/temporarily/3.png

                1. @逸仙

                  ftp服务还有主动模式和被动模式,21端口只是其中一个端口,穿透的话还需要把其他端口传出来,但是frp服务我没使用,不是很了解,我感觉你可以看看一下这个帖子看看https://www.cnblogs.com/LiuChang-blog/p/11973797.html

                  或者是找那种可以设置指定端口的ftp软件,手动指定主动端口和被动端口,然后把所有端口穿透出去

本站支持IPv6访问 本站支持SSL安全访问