frp(Fast Reverse Proxy)是一个专注于内网穿透的高性能反向代理应用。在 frp 中,关于“域名自动端口”的核心概念,通常指的是通过 HTTP/HTTPS 类型代理结合域名路由机制,实现外部访问时无需在 URL 中显式指定端口号(即自动使用默认的 80 或 443 端口),或通过 subdomain 自动生成域名。
具体而言,frp 的“自动端口”效果主要通过以下两种方式实现:
1. 基于 custom_domains 的域名映射:在 frpc 配置中,将代理类型设为 http 或 https,并指定 customDomains 字段。frps 服务端默认开启 vhostHTTPPort(通常为 80)和 vhostHTTPSPort(通常为 443)。当外部请求到达 frps 时,frps 会通过 HTTP Host 头识别域名,自动将流量转发到对应的内网服务。例如,配置 customDomains = [\"app.example.com\"] 后,用户只需访问 http://app.example.com,无需在域名后添加端口号,实现了端口的“自动隐藏”。
2. 基于 subdomain 的自动域名生成:在 frps 配置中设置 subdomainHost(如 example.com),并在 frpc 中指定 subdomain(如 app)。frp 会自动拼接生成完整域名 app.example.com,并自动绑定到 HTTP/HTTPS 的默认端口。这种方式不仅实现了端口的自动映射,还实现了域名的自动分配,特别适合批量部署场景。
以下是一个标准的配置示例(以 frp v0.52.0 及以上的 TOML 配置格式为例):
frps.toml(服务端)
bindPort = 7000
vhostHTTPPort = 80
vhostHTTPSPort = 443
subdomainHost = \"example.com\"
frpc.toml(客户端)
serverAddr = \"x.x.x.x\"
serverPort = 7000
[[proxies]]
name = \"web\"
type = \"http\"
localPort = 8080
subdomain = \"app\"
# 或者使用 customDomains = [\"app.example.com\"]
通过上述配置,内网服务运行在 8080 端口,但公网用户访问 http://app.example.com 时,frp 会自动通过 80 端口接收请求,并精准转发至内网的 8080 端口。这个过程对用户完全透明,实现了“域名访问、自动端口”的效果。
需要注意的是,对于 TCP/UDP 类型的代理,frp 并不支持自动分配公网端口,必须显式指定 remotePort。因此,“自动端口”这一特性是 HTTP/HTTPS 类型代理独有的优势,得益于 frps 对 80/443 端口的统一监听和基于域名的七层路由能力。

查看详情

查看详情