frp显示连接但是无法访问原因解决

引言

上篇配置完成了frp配置,fprs也显示连接成功了,但是网页访问一直失败.

使用 telnet [ip] [端口]以后返回nginx 400 Bad Request,说明:

网络层完全通了! 端口映射、防火墙、frp 转发全部跑通,流量已经到达后端服务。

错误不是连不上,是协议不匹配

为什么会 400?

  1. frp 做纯 TCP 转发,只是原样搬运字节 ,不会做 HTTP 协议转换。

  2. 内网192.168.0.101:5000(配置的是TCP 协议),浏览器发 HTTP 请求过去,后端 nginx 看不懂浏览器 HTTP 报文,直接返回 400 错误。

修复

frpc 配置适配域名

修改 frpc.toml

当前还是 type="tcp",需要改成 http 模式,删除 remotePort,增加 customDomains。保存 frpc.toml,重启 frpc 客户端。

h 复制代码
serverAddr="60.190.0.22"
serverPort=7000
auth.token="Zzcc5253"

[[proxies]]
name="nas"
type="http"
localIP="192.168.0.101"
localPort=5000
customDomains=["60.190.0.22"]

查看frpc的日志,frpc 已经成功连上 frps,http 代理 nas 注册成功。

修改frps.toml

在配置末尾,新增一行 vhostHTTPPort = 5666,保存,重启 frps 服务。完整配置如下:

h 复制代码
bindAddr = "0.0.0.0"
bindPort = 7000
auth.method = "token"
auth.token = "[密钥]"

webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "[用户名]"
webServer.password = "[密码]"

vhostHTTPPort = 5666   # ←新增这一行,对外的端口
  1. 登录 frps 管理面板,进去看 proxies 列表,确认 nas 代理状态是 running,类型是http
  2. 在 B 网 frps 虚拟机本机执行测试命令:curl -v http://127.0.0.1:5666

    原因:type=http模式下,frp 依靠请求里的Host头匹配customDomains
    本机 curl 访问127.0.0.1:5666,请求 Host 头是127.0.0.1:5666,但 frpc 配置的customDomains=["60.190.0.22"],两者不匹配 → frp 找不到对应的代理,直接返回 404。
    curl -v -H "Host:60.190.0.22" http://127.0.0.1:5666测试一下,加上-H "Host:60.190.0.22"模拟浏览器外网访问的 Host 头,就能转发到 NAS。
相关推荐
SoStraw8 天前
webrpc 常见问题 FAQ:无公网 IP、Token、传文件,以及和 frp / WebRTC 的差别
tcp/ip·webrtc·frp·token·faq·webrpc·无公网ip
单位圆的日常2 个月前
FRP反向隧道实现异地SSH家用Linux
linux·运维·ssh·frp
Irissgwe3 个月前
10、NAT、代理服务、内网穿透
网络·frp·内网穿透·nat·代理服务器·反向代理·正向代理
飘飘叶4 个月前
[FRP]Windows 安装 frpc 客户端,以及P2P方式ssh配置
windows·frp
闻道且行之4 个月前
frp+Nginx 内网穿透详细配置教程
运维·网络·nginx·frp·内网穿透
平凡的阳阳4 个月前
千里通Linux盒子搭建FRP全教程:低成本实现内网穿透+代理服务器
linux·frp·内网穿透·代理·socks5·远程ssh
竹之却5 个月前
【Minecraft】我的世界 Windows 开服,内网穿透教程
frp·内网穿透·我的世界·minecraft·樱花穿透·sakurafrp·我的世界开服
竹之却5 个月前
【Linux】内网穿透原理
linux·服务器·网络·frp·内网穿透·p2p·xtcp
竹之却5 个月前
如何使用 SakuraFrp 做内网穿透
运维·服务器·网络·frp·内网穿透·sakurafrp