一、 概述
受限于内网环境,外面无法直接访问边缘端的服务,给运维带来不便,而fpc可以帮我们解决问题。
frp的官网地址: 概览 | frp
二、下载fpc
fpc的包是放在github上 https://github.com/fatedier/frp/releases
ps : 保持同一版本,服务端与客户端可以架构不一样
三、服务器frps配置
文件:frps.toml
#启用http类型监听端口
vhostHTTPPort = 8088
#frps服务监听端口
bindPort = 9000
#web服务端口
webServer.port = 9001
#登录web服务的用户名
webServer.user = "admin"
#登录web服务的密码
webServer.password = "admin"
#web服务绑定的ip
webServer.addr = "0.0.0.0"
#frpc连接的校验信息
auth.token = "abc"
四、 客户端frpc配置
文件:frpc.toml
# frps服务ip
serverAddr = "x.x.x.x"
# frps服务端口
serverPort = 9000
# 连接frps的token信息
auth.token = "abc"
# 代理配置
[[proxies]]
# 名称
name = "web"
#类型为http
type = "http"
# 绑定本机ip
localIP = "127.0.0.1"
# 绑定本机端口
localPort = 80
# 访问域名,如果没有则填ip
customDomains = ["web.yourdomain.com"]
# 可选参数 URL 路由,对应项目上下文路径,会自动拼接在请求地址后,如location=/api ,则请求 http://{server}/api/xx/yy 对应本地请求 http://{local_server}/api/xx/yy
locations = ["/"]
PS : 配置自定义域名customDomains的目的是为了区分不同的映射,原理是通过请求头的Host字段区分转发的目的的。
配置方法:
在本机的hosts文件配置域名解析
目录:C:\Windows\System32\drivers\etc\hosts
x.x.x.x web.yourdomain.com
其中 x.x.x.x为frps服务器ip,然后用域名访问 http://web.yourdomain.com/....
这样请求头自带Host:web.yourdomain.com ,frps服务就可以正确转发。(同理,如果使用ip直接访问,则需要自己添加Host参数)
五、fprc一键部署脚本
以AMD64架构为例
#!/bin/bash
FRP_VERSION="0.52.3"
FRP_INSTALL_DIR="/home/frp"
FRP_INSTALL_DIR_BAK="${FRP_INSTALL_DIR}/frp_${FRP_VERSION}_linux_amd64"
FRP_CONFIG_FILE="${FRP_INSTALL_DIR}/frp_${FRP_VERSION}_linux_amd64/frpc.toml"
FRP_DOWNLOAD_URL="https://github.com/fatedier/frp/releases/download/${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gz"
FRP_SERVICE_FILE="/home/frp/frpc.service"
if [ ! -d "$FRP_INSTALL_DIR" ]; then
mkdir -p "$FRP_INSTALL_DIR"
fi
if [ ! -f "$FRP_INSTALL_DIR/frp_${FRP_VERSION}_linux_amd64.tar.gz" ]; then
wget -P "$FRP_INSTALL_DIR" "$FRP_DOWNLOAD_URL"
fi
if [ ! -f "$FRP_INSTALL_DIR/frp_${FRP_VERSION}_linux_amd64" ]; then
tar -zxvf "${FRP_INSTALL_DIR}/frp_${FRP_VERSION}_linux_amd64.tar.gz" -C "$FRP_INSTALL_DIR"
fi
cat > "${FRP_CONFIG_FILE}" << EOF
serverAddr = "x.x.x.x"
serverPort = 9000
auth.token = "abc"
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["x.x.x.x"]
locations = ["/"]
EOF
cat > "${FRP_SERVICE_FILE}" << EOF
[Unit]
Description=Frp Client
After=network.target
[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=${FRP_INSTALL_DIR_BAK}/frpc -c ${FRP_CONFIG_FILE}
[Install]
WantedBy=multi-user.target
EOF
sudo mv $FRP_INSTALL_DIR/frpc.service /etc/systemd/system/
# 授权
sudo chmod 644 /etc/systemd/system/frpc.service
# 刷新配置
sudo systemctl daemon-reload
# 停止frpc
sudo systemctl restart frpc
# 添加到开机启动
sudo systemctl enable frpc
#查询状态
sudo systemctl status frpc