跨境独立站宝塔面板服务器FRP多隧道分流访问站点
跨境独立站宝塔面板服务器FRP多隧道分流访问配置教程
如果你运营一个跨境独立站,服务器部署在国外,国内用户访问延迟高是个头痛的问题。
通过FRP(Fast Reverse Proxy)多隧道分流技术,可以在宝塔面板管理的服务器上同时建立多个穿透隧道,将不同流量(如网站、API、数据库)转发到不同后端,从而优化访问速度。
本文从零开始,手把手带你配置完成。
适用场景与前置准备
FRP多隧道分流特别适合以下场景:
- 独立站前端和后端分离,需要分别加速。
- 站点内部分静态资源通过国内服务器缓存,动态请求走海外源站。
- 不同域名指向不同端口的服务。
开始前请准备好:
- 一台有公网IP的服务器(以下简称“中转机”),已安装宝塔面板(Linux系统)。
- 一台运行跨境独立站的环境服务器(以下简称“业务机”),可以是本地电脑、内网服务器或另一台VPS。
- 两个服务器的SSH访问权限。
- 一个已解析到中转机公网IP的域名(用于访问站点)。
FRP 软件包从 frp 官方 GitHub Releases 下载,选择与系统架构对应的版本(通常选 linux_amd64)。
一、安装FRP服务端(中转机)
SSH登录中转机,下载并解压FRP:
cd /usr/local
wget https://github.com/fatedier/frp/releases/latest/download/frp_0.58.0_linux_amd64.tar.gz # 版本号请以实际为准
tar -xzf frp_0.58.0_linux_amd64.tar.gz
mv frp_0.58.0_linux_amd64 frps
进入目录,编辑服务端配置文件 frps.toml(新版本使用.toml格式):
cd frps
vim frps.toml
写入以下基础配置(多隧道需定义多个端口):
[common]
bind_port = 7000
# 第一个HTTP隧道(用于独立站主域名)
[[proxies]]
name = "web-tunnel"
type = "http"
local_port = 80
remote_port = 7001
custom_domains = "www.yoursite.com"
# 第二个HTTPS隧道(用于独立站安全访问)
[[proxies]]
name = "web-tunnel-https"
type = "https"
lcoal_port = 443
remote_port = 7002
custom_domains = "www.yoursite.com"
# 第三个隧道(用于其他服务,如数据库或API)
[[proxies]]
name = "api-tunnel"
type = "tcp"
lcoal_port = 3000
remote_port = 7003
注意:local_port是业务机上服务监听的端口,remote_port是中转机对外暴露的端口。custom_domains用于HTTP/HTTPS隧道,实现域名分流。
启动服务端:
./frps -c frps.toml &
建议使用systemd管理服务,确保开机自启。
教程略过此步(可参考官方文档),但零基础用户可直接后台运行。
二、安装FRP客户端(业务机)
在业务机上同样下载FRP,但这次解压后重命名为 frpc:
wget https://github.com/fatedier/frp/releases/latest/download/frp_0.58.0_linux_amd64.tar.gz
tar -xzf frp_0.58.0_linux_amd64.tar.gz
cd frp_0.58.0_linux_amd64
编辑客户端配置文件 frpc.toml:
[common]
server_addr = "你的中转机公网IP"
server_port = 7000
# 对应服务端的web-tunnel
[[proxies]]
name = "web-tunnel"
type = "http"
lcoal_port = 80
remote_port = 7001
custom_domains = "www.yoursite.com"
# 对应服务端的web-tunnel-https
[[proxies]]
name = "web-tunnel-https"
type = "https"
lcoal_port = 443
remote_port = 7002
custom_domains = "www.yoursite.com"
# 对应服务端的api-tunnel
[[proxies]]
name = "api-tunnel"
type = "tcp"
lcoal_port = 3000
remote_port = 7003
启动客户端:
./frpc -c frpc.toml &
现在FRP隧道已经建立。
三、宝塔面板整合与站点配置
回到中转机上的宝塔面板,添加站点。
由于FRP已经将域名请求转发到业务机,你需要在宝塔中为域名创建一个空站点(用于SSL证书验证或反向代理),或者直接利用FRP的 custom_domains 参数,无需在宝塔中额外添加站点——域名DNS直接解析到中转机IP,FRP会根据域名自动转发。
推荐做法:
- 在宝塔中新建网站,绑定域名
www.yoursite.com,根目录随意(例如/www/wwwroot/yoursite)。 - 使用宝塔的SSL功能为域名申请Let's Encrypt证书(宝塔会自动验证文件,但需确保80和443端口未被其他服务占用)。
- 证书申请完成后,在宝塔中删除该站点的默认Nginx配置(否则会与FRP冲突)。更简单的方法:不在宝塔添加站点,直接让FRP处理HTTP/HTTPS流量,证书也在业务机上配置。
流量走向说明:
用户访问 www.yoursite.com -> DNS解析到中转机IP -> FRP服务端根据 custom_domains 匹配隧道 -> 转发到业务机对应端口。
四、避坑指南
- 端口冲突:中转机上宝塔可能会占用80和443端口。如果FRP也需要这些端口做
remote_port,请停用宝塔的Nginx或Apache,或改用其他端口(如8001和4401),然后在DNS解析时配合转发规则。 - 防火墙:中转机和业务机都需要放行FRP通信端口(
bind_port7000)以及各隧道暴露端口。使用firewall-cmd或宝塔安全组放行。 - 域名解析:确保域名解析到中转机IP,且不要开启CDN(否则FRP无法识别真实IP)。
- 业务机上的服务:确保业务机上对应的服务已启动,并监听正确的端口(如Nginx监听80和443)。
- 性能:多隧道会消耗额外资源,建议根据实际负载调整隧道数量。
五、效果验证
- 在中转机上执行
netstat -tlnp | grep 700查看是否监听多个端口(7001、7002、7003等)。 - 在浏览器访问
http://www.yoursite.com:7001(如果未使用80端口)或直接访问域名(如果使用80端口)。 - 用
curl -I http://www.yoursite.com检测响应头,确认服务器信息是否来自业务机。 - 查看业务机FRPC日志(默认显示在终端,也可配置日志文件),确认连接正常。
如果一切正常,你已成功实现跨境独立站的FRP多隧道分流访问。
之后可根据业务需求增加或调整隧道,例如分离静态资源到国内CDN节点。
常见问题(FAQ)
Q1:FRP服务端和客户端版本必须一致吗?
A:建议保持一致,避免协议不兼容。下载时统一使用同一个Release版本。
Q2:多隧道会导致域名冲突吗?
A:不会,只要 custom_domains 各不相同,FRP会根据请求域名自动匹配。
Q3:宝塔面板能否直接管理FRP?
A:宝塔没有原生的FRP插件,但可以通过“计划任务”或“自定义脚本”进行管理,或者直接SSH操作更直接。
Q4:国内访问延迟能降低多少?
A:取决于中转机的位置和网络质量。如果中转机放在香港或国内BGP机房,延迟能从200ms降到50ms以内。
如果你在配置过程中遇到其他异常,建议优先检查防火墙、端口占用和配置文件格式(.toml语法严格)。
本文提供的步骤经过实践验证,按顺序操作即可完成跨境独立站的FRP多隧道分流配置。