frps 实现多网站穿透
要通过 frps 实现多网站穿透,核心是利用 frp 的 HTTP/HTTPS 虚拟主机功能,通过域名区分不同内网网站,实现外部通过不同域名访问内网多个服务。以下是详细配置步骤:
前提条件
-
一台有公网 IP 的服务器(运行 frps 服务端);
-
内网有多个网站服务(如 Nginx/Apache/ 本地开发服务,假设端口分别为 8080、8081 等);
-
已备案的域名(可选,也可用 IP + 端口,但域名更友好),并将域名解析到公网服务器 IP(如
site1.example.com、site2.example.com均解析到 frps 服务器 IP)。
步骤 1:配置 frps 服务端(公网服务器)
1.1 创建 / 修改 frps 配置文件(frps.ini)
[common] # 客户端连接frps的端口(自定义,如7000) bind_port = 7000 # HTTP虚拟主机端口(外部访问内网HTTP网站的端口,如80) vhost_http_port = 80 # (可选)HTTPS虚拟主机端口(如需HTTPS,设置为443) # vhost_https_port = 443 # (可选)控制台端口(用于查看frp状态) dashboard_port = 7500 dashboard_user = admin # 控制台用户名 dashboard_pwd = 123456 # 控制台密码 # (可选)安全认证token(客户端需一致,防止未授权连接) token = your_token_123
1.2 启动 frps 服务端
根据系统执行启动命令:
# Linux ./frps -c ./frps.ini # Windows(cmd或PowerShell) frps.exe -c frps.ini
步骤 2:配置 frpc 客户端(内网机器)
2.1 创建 / 修改 frpc 配置文件(frpc.ini)
[common] # frps服务端的公网IP(或域名) server_addr = 1.2.3.4 # 替换为你的公网服务器IP # frps服务端的bind_port(与服务端一致) server_port = 7000 # 认证token(与服务端一致) token = your_token_123 # 第一个内网网站(示例:本地8080端口的服务) [web1] type = http # 协议类型(HTTP) local_ip = 127.0.0.1 # 内网网站的IP(本地服务填127.0.0.1,局域网服务填对应IP) local_port = 8080 # 内网网站的端口 custom_domains = site1.example.com # 对应外部访问的域名(需解析到frps服务器IP) # 第二个内网网站(示例:本地8081端口的服务) [web2] type = http local_ip = 127.0.0.1 local_port = 8081 custom_domains = site2.example.com # 第二个域名 # (可选)更多网站:复制上述[webX]格式,修改名称、端口和域名即可
2.2 启动 frpc 客户端
# Linux ./frpc -c ./frpc.ini # Windows frpc.exe -c frpc.ini
步骤 3:验证配置
-
检查域名解析:确保
site1.example.com、site2.example.com已解析到 frps 服务器的公网 IP(可通过ping site1.example.com验证)。 -
访问测试:
-
外部浏览器访问
http://site1.example.com→ 应转发到内网 8080 端口的服务; -
访问
http://site2.example.com→ 应转发到内网 8081 端口的服务。
进阶配置(可选)
1. HTTPS 穿透
https:
-
frps.ini 增加 HTTPS 端口和证书:
-
vhost_https_port = 443 # SSL证书路径(需在frps服务器上放置证书文件) https_cert_file = /path/to/cert.pem https_key_file = /path/to/key.pem
-
frpc.ini 中对应网站的
type改为https: -
[web1_https] type = https local_ip = 127.0.0.1 local_port = 8080 custom_domains = site1.example.com
2. 子路径区分(同一域名下的多网站)
若想通过同一域名的不同路径访问多网站(如example.com/web1、example.com/web2),可在客户端配置中用locations指定路径:
# 子路径/web1对应内网8080 [web1_path] type = http local_ip = 127.0.0.1 local_port = 8080 custom_domains = example.com locations = /web1 # 子路径/web2对应内网8081 [web2_path] type = http local_ip = 127.0.0.1 local_port = 8081 custom_domains = example.com locations = /web2
常见问题排查
-
无法访问:
-
检查 frps/frpc 是否启动成功(查看日志,加
-loglevel debug打印详细日志); -
确认 frps 服务器的防火墙开放了
bind_port(7000)、vhost_http_port(80)等端口; -
验证域名解析是否正确(
nslookup site1.example.com)。 -
域名冲突:确保
custom_domains在客户端配置中唯一,不同网站不能用相同域名(除非用子路径)。 -
HTTPS 证书问题:证书需匹配
custom_domains的域名,否则浏览器会提示不安全。

