5A景区网站建设

frps 配置指南

frps 配置指南frp(Fast Reverse Proxy)是一个高性能的反向代理工具,frps 是其服务器端(Server)。frps 的配置文件默认名为 frps.tomlfrps.ini,推荐使用 TOML 格式(从 frp v0.44.0 开始支持)。配置文件位于启动目录下,或通过命令行参数 -c 指定。1. 基本配置步骤

  1. 下载 frp:从 GitHub Releases 下载最新版,解压后得到 frps 可执行文件。
  2. 创建配置文件:在 frps 所在目录创建 frps.toml
  3. 编辑配置:根据需求修改参数。
  4. 启动 frps

    bash

    ./frps -c frps.toml

    或后台运行:nohup ./frps -c frps.toml &

  5. 验证:检查日志或使用 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 限制资源。
  • 性能调优:如果高并发,调整 maxPoolCountbandwidthLimit
  • 更新配置:修改后重启 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。你可以根据实际情况调整路径。步骤:
  1. 创建服务文件:使用 sudo nano /etc/systemd/system/frps.service(或使用你喜欢的编辑器)创建文件。
  2. 复制以下内容到文件中:
[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
  1. 保存并启用服务
    • 重新加载 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),请修改 WorkingDirectoryExecStart 中的路径。
  • 配置文件:确保 frps.ini 存在并配置好(如 bind_port=7000 等)。
  • 测试:启动后,用 netstat -tlnp | grep frps 检查端口是否监听。

如果你的 frp 版本或安装方式不同,提供更多细节,我可以进一步调整!

退出移动版