弄懂FRP内网穿透的 HTTP 类型代理
摘要: 通过使用HTTP类型的代理,用户可以方便地通过域名访问内网服务,避免了直接暴露IP和端口带来的安全隐患。
前言
Frp支持多种代理类型:tcp、udp、http、https、stcp、tcpmux、stcp、sudp。
为了更好地使用FRP,同时提升安全性,本文主要阐述如何使用Frp的http类型代理
以及实现原理。
其实内网的Web Http服务(如gitea、MinIO、QBittorrent…),应该使用 Frp 的 HTTP 类型
会更合理。
HTT类型特点
安全性
- 采用 token 认证机制
- 支持 HTTPS 加密传输
- 域名访问控制
易用性
- 简单的三步配置流程
- 清晰的配置文件结构
- 支持无端口访问
可扩展性
- 支持多服务配置
- 支持反向代理整合
- 便于后期维护
流程
只需要三个步骤:
服务端配置HTTP/HTTPS端口(12280/10443) —> 客户端设置HTTP类型代理并绑定域名 —> 通过反向代理+SSL证书实现无端口域名访问
frps服务端设置
frps.toml
# 添加以下配置
vhostHTTPPort = 12280 # Frp 的 http 端口
vhostHTTPSPort = 10443 # Frp 的 https 端口
#添加添加认证机制
auth.method = "token"
auth.token = "KdkoOdk20060Lpzx"
这就意味着,内网所有使用 frp http类型进行内网穿透
的服务,都是通过 12280 和 10443 访问。
💡温馨提示:需要确保服务器防火墙开放端口:12280、10443
frpc客户端设置
frpc.toml
#添加添加认证机制
auth.method = "token"
auth.token = "KdkoOdk20060Lpzx"
#设置需要进行内网穿透的服务信息
[[proxies]]
name = "web1" # 这里输入服务的名字
type = "http" # https类型
localIP = "192.168.22.11"
localPort = 12321
customDomains = ["web1.example.com"] # 添加允许的域名
这意味着,外网访问时:
- 只能通过域名web1.example.com访问
- 不能通过 IP + 端口直接访问(如果需要通过 IP + 端口访问,需要使用 TCP 类型代理,本文暂不讨论TCP类型代理)
实现无端口访问
在frps的服务器,配置反向代理,并设置访问HTTP自动跳转到HTTPS
,实现无端口访问。
反向代理时,必须使用 vhostHTTPPort/vhostHTTPSPort(即 12280/10443)进行反向代理配置,通过域名区分不同服务的机制使得多服务共享同一端口成为可能,这正是 Frp HTTP 类型代理的核心优势。
用户访问示意图
示意图 1
示意图 2
总结
今天明白了frp的http类型代理
的使用场景
和原理
,以后内网的Web http服务,就使用http类型代理
进行穿透。
💡 懒人总结
要安全?用HTTP(配域名+HTTPS)
要随便?用TCP(IP+端口直连,但小心被劫)
记住:FRP不加密=快递裸奔,加Token=密码锁! 🔐
FAQ
那是不是意味着外网不能通过ip+端口进行访问?
是的,在这个 HTTP/HTTPS 类型的 frp 配置中,外网确实不能通过 IP + 端口直接访问。
这是因为: HTTP/HTTPS 类型的特点
- 基于域名路由
- 必须通过配置的 customDomains 域名访问
- 不支持直接 IP + 端口访问
如果需要通过 IP + 端口访问,那怎么办?
需要使用 TCP 类型代理。
frpc.toml
[[proxies]]
name = "web1-tcp"
type = "tcp"
localIP = "192.168.22.11"
localPort = 12321
remotePort = 12345 # frps 服务器上的端口
为什么有些场景必须使用FRP的TCP类型代理?
在使用FRP进行内网穿透时,有些场景必须使用TCP类型,如数据库服务(MySQL、PostgreSQL等)、SSH远程连接…