引言
上篇配置完成了frp配置,fprs也显示连接成功了,但是网页访问一直失败.
使用 telnet [ip] [端口]以后返回nginx 400 Bad Request,说明:
网络层完全通了! 端口映射、防火墙、frp 转发全部跑通,流量已经到达后端服务。

错误不是连不上,是协议不匹配 。
为什么会 400?
-
frp 做纯 TCP 转发,只是原样搬运字节 ,不会做 HTTP 协议转换。

-
内网
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 # ←新增这一行,对外的端口
- 登录 frps 管理面板,进去看 proxies 列表,确认 nas 代理状态是 running,类型是http 。

- 在 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。
