frp自定义域名配置:打造专属的访问入口
你是否还在为复杂的端口号记忆烦恼?是否希望通过简洁的域名访问内网服务?本文将详细介绍如何使用frp配置自定义域名,实现无需记忆端口号即可访问内网服务的便捷体验。读完本文,你将掌握frp服务端与客户端的域名配置方法、常见问题解决及最佳实践。
自定义域名工作原理
frp通过虚拟主机(Virtual Host) 技术实现自定义域名功能。当客户端配置customDomains或subdomain时,frps服务端会根据HTTP请求的Host头信息将流量路由到对应的内网服务。此过程无需额外端口映射,仅需80/443端口即可支持多个域名解析。
核心优势:
- 简化访问:用
web.yourdomain.com替代server_ip:port - 多服务共存:单服务器IP可托管多个网站/应用
- 安全隐蔽:避免暴露具体端口,降低攻击面
服务端配置(frps)
基础配置
修改frps配置文件conf/frps.toml,启用HTTP/HTTPS端口并设置子域名根域:
# frps.toml
bindAddr = "0.0.0.0"
bindPort = 7000 # frp主通信端口
# 启用HTTP和HTTPS虚拟主机
vhostHTTPPort = 80 # HTTP流量入口
vhostHTTPSPort = 443 # HTTPS流量入口
# 子域名根域配置(可选)
subDomainHost = "frps.com" # 子域名将解析为 *.frps.com
高级限制
通过conf/frps_full_example.toml可配置域名访问限制:
# 仅允许特定域名访问(白名单)
allowedDomains = ["yourdomain.com", "*.yourdomain.com"]
# 自定义404页面
custom404Page = "/var/www/404.html"
客户端配置(frpc)
1. 自定义域名(customDomains)
适合拥有独立域名的场景,需将域名A记录指向frps服务器IP:
# frpc.toml
[[proxies]]
name = "web_server"
type = "http" # 必须为http/https类型
localIP = "127.0.0.1"
localPort = 8080
# 自定义域名列表
customDomains = ["web.yourdomain.com", "www.yourdomain.com"]
# 可选:HTTP Basic认证
httpUser = "admin"
httpPassword = "your_password"
2. 子域名(subdomain)
当服务端配置subDomainHost后,客户端可简化配置:
# frpc.toml
[[proxies]]
name = "blog_service"
type = "http"
localIP = "127.0.0.1"
localPort = 8081
# 子域名配置(最终访问地址:blog.frps.com)
subdomain = "blog"
3. 路径路由(locations)
通过路径匹配实现同一域名下的多服务分流:
# frpc.toml
[[proxies]]
name = "api_gateway"
type = "http"
localIP = "127.0.0.1"
localPort = 8082
customDomains = ["api.yourdomain.com"]
# 仅路由特定路径
locations = ["/v1", "/api"] # 匹配/api/*和/v1/*请求
验证与管理
1. 启动服务
# 启动服务端
./frps -c ./conf/frps.toml
# 启动客户端
./frpc -c ./conf/frpc.toml
2. 仪表盘监控
访问frps仪表盘http://frps_ip:7500,查看域名代理状态:
3. 测试访问
# 测试HTTP访问
curl -H "Host: web.yourdomain.com" http://frps_ip
# 或直接通过域名访问(需DNS解析生效)
curl http://web.yourdomain.com
常见问题解决
1. 域名无法解析
- 检查DNS配置:确保域名A记录指向frps服务器公网IP
- 端口开放:确认80/443端口在防火墙中放行
- 路径冲突:同一域名的不同路径代理需配置不同
locations
2. HTTPS证书配置
通过frpc插件实现HTTPS终结:
[[proxies]]
name = "https_web"
type = "https"
customDomains = ["secure.yourdomain.com"]
[proxies.plugin]
type = "https2http" # HTTPS转HTTP插件
localAddr = "127.0.0.1:8080"
crtPath = "./server.crt" # SSL证书路径
keyPath = "./server.key" # 私钥路径
3. 多域名证书管理
推荐使用Nginx作为frps前端代理,统一处理SSL证书:
# Nginx配置示例
server {
listen 443 ssl;
server_name *.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:80; # 转发至frps的vhostHTTPPort
proxy_set_header Host $host;
}
}
最佳实践
1. 配置文件组织
建议按服务类型拆分配置,通过includes合并:
# frpc.toml
includes = ["./proxies/*.toml"] # 包含所有代理配置
# proxies/web.toml
[[proxies]]
name = "web"
type = "http"
# ...其他配置
2. 动态域名解析
配合DDNS工具自动更新域名解析:
# 示例:使用阿里云DDNS脚本
*/5 * * * * /usr/bin/aliyun-ddns.sh yourdomain.com
3. 监控与日志
通过client/admin_api.go提供的API监控域名状态:
# 查看所有代理状态
curl http://127.0.0.1:7400/api/proxies -u admin:admin
总结
自定义域名功能让frp从"端口转发工具"升级为"虚拟主机服务",通过本文配置可实现:
- 多服务共用80/443端口
- 专业域名替代IP+端口访问
- 精细化流量路由与权限控制
完整配置示例可参考:
通过合理规划域名结构,可构建企业级内网穿透服务,兼顾便捷性与安全性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





