frps 配置指南frp(Fast Reverse Proxy)是一个高性能的反向代理工具,frps 是其服务器端(Server)。frps 的配置文件默认名为 frps.toml 或 frps.ini,推荐使用 TOML 格式(从 frp v0.44.0 开始支持)。配置文件位于启动目录下,或通过命令行参数 -c 指定。1. 基本配置步骤
- 下载 frp:从 GitHub Releases 下载最新版,解压后得到 frps 可执行文件。
- 创建配置文件:在 frps 所在目录创建 frps.toml。
- 编辑配置:根据需求修改参数。
- 启动 frps:
bash
./frps -c frps.toml或后台运行:nohup ./frps -c frps.toml &。
- 验证:检查日志或使用 netstat -tulnp | grep 7000(默认端口)确认监听。
2. 基本 frps.toml 示例以下是一个简单的 frps 配置示例,适合初次使用(监听 7000 端口,启用 Dashboard):
toml
# frps 服务端配置
# 全局设置
bindPort = 7000 # frpc 连接 frps 的端口,默认 7000
vhostHTTPPort = 80 # HTTP 虚拟主机端口,默认 80
vhostHTTPSPort = 443 # HTTPS 虚拟主机端口,默认 443
vhostHTTPTimeout = "60s" # HTTP 虚拟主机超时时间
# Dashboard 配置(Web 监控面板)
dashboardPort = 7500 # Dashboard 监听端口
dashboardUser = "admin" # Dashboard 用户名
dashboardPwd = "admin" # Dashboard 密码
dashboardAddr = "0.0.0.0"# Dashboard 绑定地址
# 认证配置(可选,增强安全)
# token = "your-secret-token" # 所有客户端必须匹配此 token
# 日志配置
log.level = "info" # 日志级别:trace, debug, info, warn, error
log.file = "./frps.log" # 日志文件路径
- 启动后访问 Dashboard:浏览器打开 http://your-server-ip:7500,用 admin/admin 登录查看连接状态。
3. 高级配置示例(frps_full.toml)以下是更完整的配置示例,包含常见高级选项(基于 frp 官方文档)。你可以复制到文件中,根据需要调整。
toml
# [common] 全局公共配置
bindPort = 7000 # 服务端监听端口,用于 frpc 连接
bindAddr = "0.0.0.0" # 绑定地址,默认为所有接口
# token = "your-secret-token" # 认证 token,所有客户端需匹配
# subDomainHost = "frp.example.com" # 子域名主机,用于 vhost
# 虚拟主机端口
vhostHTTPPort = 80 # HTTP vhost 端口
vhostHTTPSPort = 443 # HTTPS vhost 端口
vhostHTTPTimeout = "60s" # HTTP 超时
allowPorts = [2000, 3000, 3001, 3002, 3003, 3004] # 允许的端口范围(可选,限制代理端口)
# Dashboard
dashboardPort = 7500 # Dashboard 端口
dashboardUser = "admin"
dashboardPwd = "admin"
dashboardAddr = "0.0.0.0"
# dashboardTLSCertFile = "dashboard.crt" # Dashboard TLS 证书(可选)
# dashboardTLSKeyFile = "dashboard.key"
# 认证与安全
auth.method = "token" # 认证方法:token, oidc
# auth.token = "your-token" # 如果 method=token
# auth.oidc.issuer = "https://example.com" # OIDC 配置(高级)
# 带宽限制(全局)
bandwidthLimit = "1MB" # 全局带宽限制
bandwidthLimitMode = "avg" # 限制模式:max 或 avg
# 连接设置
maxPoolCount = 100 # 最大连接池大小
authenticationMethod = "token" # 认证方法(旧版兼容)
heartbeatTimeout = "90s" # 心跳超时
# TCP 代理设置
tcpmuxHTTPConnectPort = 1337 # TCP 多路复用端口(可选)
# 日志
log.level = "info"
log.file = "./frps.log"
log.maxDays = 3 # 日志保留天数
log.compress = true # 压缩旧日志
# 其他
allowUsers = ["user1", "user2"] # 允许的用户列表(多用户模式)
# user.user1.token = "token1" # 用户特定 token
# user.user1.bandwidthLimit = "1MB" # 用户带宽限制
# TCP 流设置(高级)
tcpMux = true # 启用 TCP 多路复用
# tcpStream = true # 启用 TCP 流(实验性)
# KCP 代理设置(UDP 优化)
kcpBindPort = 7000 # KCP 监听端口
# QUIC 代理设置(实验性)
quicBindPort = 7000 # QUIC 监听端口
# TFO(TCP Fast Open)设置
tfo = 0 # 0=禁用, 2=启用(Linux)
# WebSocket 代理(可选)
# websocketStartingDelimiter = "default" # WebSocket 起始分隔符
- 说明:
- # 为注释行,可忽略。
- 数组如 allowPorts = [80, 443] 支持多个值。
- 字符串值如端口超时需加引号。
- 对于多用户模式,使用 allowUsers 和嵌套 user.* 部分。
4. 常见问题与优化
- 端口冲突:确保 bindPort 未被占用(用 ss -tulnp | grep 7000 检查)。
- 防火墙:开放所需端口,如 sudo ufw allow 7000。
- 安全建议:
- 始终设置 token 避免未授权连接。
- 使用 HTTPS:配置 vhostHTTPSPort 并提供证书。
- 生产环境:启用 log.level = “warn” 减少日志;设置 maxPoolCount 限制资源。
- 性能调优:如果高并发,调整 maxPoolCount 和 bandwidthLimit。
- 更新配置:修改后重启 frps(pkill frps && ./frps -c frps.toml)。
Nginx 配置(服务器)
bash
sudo nano /etc/nginx/sites-available/frp
nginx
# 反向代理:xxx.xx.com → frps 的 vhostHTTPPort:8080
server {
listen 80;
server_name xxx.xx.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# HTTPS(可选,推荐用 certbot 自动生成)
server {
listen 443 ssl;
server_name xxx.xx.com;
ssl_certificate /etc/letsencrypt/live/xxx.xx.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xxx.xx.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}
启用并重启
bash
sudo ln -s /etc/nginx/sites-available/frp /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx
frpc 客户端配置(你的本地电脑)1. 下载 frp(和 frps 同版本)https://github.com/fatedier/frp/releases2. 创建 frpc.toml
toml
# frpc.toml
[common]
server_addr = your-server-public-ip # 服务器公网 IP
server_port = 7000
# token = your-secret-token-123 # 和 frps 一致(如果设置了)
[web_app]
type = http
local_ip = 127.0.0.1
local_port = 8080 # 你本地的应用端口
custom_domains = xxx.xx.com # 必须和 Nginx server_name 一致
3. 启动 frpc(本地电脑)
bash
# Windows
frpc.exe -c frpc.toml
# macOS / Linux
./frpc -c frpc.toml
建议设为开机启动(Windows 服务 / macOS launchd / Linux systemd)
FRPS 服务文件(systemd)
在 Ubuntu 上运行 FRPS(frp 的服务器端)作为系统服务,你需要创建一个 systemd 服务文件。以下是一个标准的 systemd 服务文件模板,假设 frp 已安装在 /opt/frp 目录下,配置文件为 /opt/frp/frps.ini。你可以根据实际情况调整路径。步骤:
- 创建服务文件:使用 sudo nano /etc/systemd/system/frps.service(或使用你喜欢的编辑器)创建文件。
- 复制以下内容到文件中:
[Unit]
Description=FRP Server (frps)
After=network.target
Wants=network.target
[Service]
Type=simple
User=root # 建议使用非 root 用户,如创建专用用户
Group=root
WorkingDirectory=/opt/frp
ExecStart=/opt/frp/frps -c /opt/frp/frps.ini
ExecReload=/bin/kill -s HUP $MAINPID
Restart=always
RestartSec=5
LimitNOFILE=65536
# 日志配置(可选)
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
- 保存并启用服务:
- 重新加载 systemd:sudo systemctl daemon-reload
- 启用开机自启:sudo systemctl enable frps
- 启动服务:sudo systemctl start frps
- 查看状态:sudo systemctl status frps
- 查看日志:sudo journalctl -u frps -f
说明:
- User/Group:默认用 root,但安全起见,建议创建专用用户(如 frp 用户),并用 chown -R frp:frp /opt/frp 更改权限。
- 路径调整:如果 frp 安装在其他目录(如 /usr/local/frp),请修改 WorkingDirectory 和 ExecStart 中的路径。
- 配置文件:确保 frps.ini 存在并配置好(如 bind_port=7000 等)。
- 测试:启动后,用 netstat -tlnp | grep frps 检查端口是否监听。
如果你的 frp 版本或安装方式不同,提供更多细节,我可以进一步调整!