FRP + Caddy 域名HTTPS配置指南

FRP + Caddy 域名HTTPS配置指南

本指南提供使用FRP内网穿透配合Caddy反向代理实现域名访问和HTTPS加密的完整配置方案

📋 目录

项目概览

本方案通过以下组件实现内网服务的外网访问:

复制代码
用户访问 [域名] --HTTPS--> [Caddy服务器] --TCP代理--> [FRP服务端] --内网穿透--> [FRP客户端] --> [本地服务]

架构说明

  • Caddy服务器: 处理域名解析、HTTPS证书自动生成和反向代理
  • FRP服务端: 运行在Caddy服务器的7000端口,负责内网穿透连接
  • FRP客户端: 运行在openclaw服务器,连接到FRP服务端
  • 服务端口映射: 本地18789端口 → 外网18089端口

准备工作

软件下载

FRP下载
Caddy下载

服务器要求

  1. Caddy服务器 (公网服务器)

    • 具有公网IP和域名
    • 开放80、443、7000、18089端口
  2. Openclaw服务器 (内网服务器)

    • 能够访问Caddy服务器
    • 本地服务运行在18789端口

FRP配置

1. FRP客户端配置 (openclaw服务器)

创建配置文件 frpc.toml

toml 复制代码
# frpc.toml - FRP客户端配置文件

# FRP服务端地址
serverAddr = "你的Caddy服务器公网IP或域名"

# FRP服务端监听端口
serverPort = 7000

# 代理配置
[[proxies]]
# 代理名称
name = "openclaw"
# 代理类型
# tcp: TCP协议转发,适用于大多数场景
# http: HTTP协议转发  
# https: HTTPS协议转发
# stcp: 安全的TCP内网穿透
# sudp: UDP协议转发
# xtcp: P2P的TCP内网穿透
# httpProxy: HTTP代理转发
# httpsProxy: HTTPS代理转发
# tcpPort: 端口复用器,可以为指定的本地服务分配一个空闲的远程端口
# https2http: TLS over HTTPS to HTTP反向代理
# https2https: TLS over HTTPS to HTTPS反向代理
# pluginUnixDomainSocket: Unix Domain Socket
# pluginHTTPProxy: HTTP代理插件
# pluginSocks5: SOCKS5代理插件
# pluginStaticFile: 静态文件代理插件
# pluginHTTP2HTTPS: HTTP to HTTPS反向代理
# pluginHTTPS2HTTP: HTTPS to HTTP反向代理
# plugin55: 插件支持更多的自定义转发规则
# pluginTLS: TLS层代理插件
type = "tcp"

# 本地服务IP地址
localIP = "127.0.0.1"

# 本地服务端口
localPort = 18789

# 远程映射端口
remotePort = 18089

2. FRP服务端配置 (Caddy服务器)

创建配置文件 frps.toml

toml 复制代码
# frps.toml - FRP服务端配置文件

# 服务端监听端口,用于接收客户端连接
bindPort = 7000

# HTTP虚拟主机监听端口
vhostHTTPPort = 80

# 以下是可选配置项,根据需要添加:

# 服务端Token验证 (建议生产环境启用)
# token = "your_auth_token"

# 连接池大小
# poolCount = 5

# 是否启用HTTP虚拟主机路由
# vhostHTTPPort = 80
# vhostHTTPSPort = 443

# 日志配置
# log.to = "./frps.log"
# log.level = "info"
# log.maxDays = 3

# 允许代理绑定的端口范围
# allowPorts = [
#     { start = 18080, end = 19080 },
#     { start = 20000, end = 20500 },
# ]

3. FRP服务配置文件

创建systemd服务文件 /etc/systemd/system/frp.service

ini 复制代码
[Unit]
Description=FRP Service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/usr/local/frp/frp版本号
ExecStart=/usr/local/frp/frp版本号/frpc -c /usr/local/frp/frp版本号/frpc.toml
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

注意:

  • 如果是Caddy服务器,请将frpc改为frps,配置文件改为frps.toml
  • 请将路径/usr/local/frp/frp版本号替换为实际的frp安装路径

Caddy配置

1. Caddy安装步骤

bash 复制代码
# 1. 下载并解压
cd /usr/local/bin
tar -xzf caddy.tar.gz
chmod +x caddy

# 2. 验证安装
caddy version

# 3. 创建必要的目录
mkdir -p /etc/caddy
mkdir -p /var/lib/caddy
mkdir -p /var/log/caddy

# 4. 防火墙设置 (如果启用防火墙)
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

2. Caddyfile配置

创建配置文件 /etc/caddy/Caddyfile

caddyfile 复制代码
{
    # 禁用HTTPS重定向,让Caddy自动处理证书
    auto_https disable_redirects
}

# 你的域名配置
你的域名.com {
    # 反向代理配置
    reverse_proxy 127.0.0.1:18089 {
        # flush_interval -1: 禁用缓冲,实时传输数据
        flush_interval -1
        
        # 传递客户端真实信息到后端
        header_up Host {host}
        header_up X-Real-IP {remote_host}
        header_up X-Forwarded-For {remote_host}
        header_up X-Forwarded-Proto {scheme}
    }
    
    # WebSocket支持 (如果需要)
    @websockets {
        header Connection *Upgrade*
        header Upgrade *
    }
    handle @websockets {
        reverse_proxy 127.0.0.1:18089 {
            flush_interval -1
        }
    }
    
    # 日志配置
    log {
        output file /var/log/caddy/lshclaw-access.log
        format console
    }
    
    # 可选: 访问控制
    # @blocked {
    #     not remote_ip 192.168.1.0/24
    #     not remote_ip 10.0.0.0/8
    # }
    # abort @blocked
}

# 备用配置: 通配符域名支持
# *.你的域名.com {
#     reverse_proxy 127.0.0.1:18089 {
#         flush_interval -1
#         header_up Host {host}
#         header_up X-Real-IP {remote_host}
#         header_up X-Forwarded-For {remote_host}
#         header_up X-Forwarded-Proto {scheme}
#     }
#     
#     log {
#         output file /var/log/caddy/wildcard-access.log
#         format console
#     }
# }

3. Caddy服务配置

创建systemd服务文件 /etc/systemd/system/caddy.service

ini 复制代码
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Wants=network-online.target

[Service]
User=root
Group=root

# 启动命令
ExecStart=/usr/local/bin/caddy run --environ \
    --config /etc/caddy/Caddyfile \
    --adapter caddyfile

# 重载命令
ExecReload=/usr/local/bin/caddy reload \
    --config /etc/caddy/Caddyfile \
    --adapter caddyfile

TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE

Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

服务管理

1. FRP服务管理脚本

创建重启脚本 restart_frp.sh

bash 复制代码
#!/bin/bash

# FRP 一键重启脚本 - 适配 systemd 系统服务

echo "==================== 正在重启 FRP 服务 ===================="

# 标准重启系统服务(自动停止+启动,无需手动处理进程)
systemctl restart frp

# 加载服务配置(如果你改过frp.service,执行这个)
systemctl daemon-reload

echo "==================== 查看 FRP 运行状态 ===================="

# 显示服务状态,确认是否启动成功
systemctl status frp

echo "==================== FRP 重启完成! ===================="

2. Caddy服务管理脚本

创建重启脚本 restart_caddy.sh

bash 复制代码
#!/bin/bash

echo "==================== 正在重启 caddy 服务 ===================="

systemctl daemon-reload
systemctl restart caddy

echo "==================== 查看 caddy 运行状态 ===================="

systemctl status caddy

echo "==================== caddy 重启完成! ===================="

3. 常用服务管理命令

bash 复制代码
# 设置开机自启
systemctl enable frp     # Openclaw服务器
systemctl enable caddy   # Caddy服务器

# 启动服务
systemctl start frp
systemctl start caddy

# 停止服务
systemctl stop frp
systemctl stop caddy

# 查看服务状态
systemctl status frp
systemctl status caddy

# 查看日志
journalctl -u frp -f
journalctl -u caddy -f

# 查看Caddy实时日志
tail -f /var/log/caddy/lshclaw-access.log

验证测试

1. 服务状态检查

bash 复制代码
# 检查FRP服务
ps aux | grep frp
netstat -tlnp | grep :7000  # 检查7000端口
netstat -tlnp | grep :18089 # 检查18089端口

# 检查Caddy服务
ps aux | grep caddy
netstat -tlnp | grep :80
netstat -tlnp | grep :443

2. 连通性测试

bash 复制代码
# 测试域名解析
nslookup 你的域名.com

# 测试HTTPS访问
curl -I https://你的域名.com

# 测试WebSocket连接
wscat -c wss://你的域名.com

3. 故障排除

常见问题:
  1. 证书获取失败

    • 确保域名正确解析到服务器IP
    • 检查80端口是否开放(用于ACME验证)
    • 查看Caddy日志:journalctl -u caddy -f
  2. 连接超时

    • 检查FRP服务端是否正常运行
    • 确认防火墙规则正确
    • 验证FRP客户端能否连接到服务端
    • 检查网络连通性:pingtelnet
  3. 502 Bad Gateway

    • 确认FRP客户端localIP和localPort配置正确
    • 检查本地服务是否正常运行
    • 查看FRP连接状态
  4. WebSocket连接失败

    • 确保Caddy配置包含WebSocket支持
    • 检查flush_interval设置
    • 验证后端服务支持WebSocket

4. 安全建议

  1. FRP安全配置

    • 启用token认证
    • 限制允许的端口范围
    • 使用非标准端口
  2. Caddy安全配置

    • 启用访问控制
    • 配置WAF规则
    • 限制文件访问权限
  3. 网络层面

    • 配置防火墙规则
    • 使用fail2ban防止暴力破解
    • 定期更新证书

注意事项

  1. 路径替换: 请将所有示例路径替换为实际的服务器路径
  2. 域名配置: 将示例域名替换为实际使用的域名
  3. 端口检查: 确保所有端口在防火墙上开放
  4. 权限设置: 确保服务文件有正确的执行权限
  5. 日志监控: 定期检查服务日志确保正常运行
  6. 备份配置: 建议定期备份配置文件

相关推荐
追雨潮2 小时前
OpenClaw 完整部署指南(Ubuntu + 阿里云海外版)+ 飞书接入 + 2026.3.x 权限修复--新手教程
ubuntu·阿里云·飞书·openclaw
uesowys4 小时前
腾讯云使用OpenClaw搭建企业微信AI助手
人工智能·企业微信·腾讯云·openclaw
Shi_haoliu11 小时前
openClaw源码部署-linux
前端·python·ai·openclaw
·醉挽清风·11 小时前
学习笔记—Linux—文件IO
linux·服务器·学习
宁波阿成11 小时前
OpenClaw 在 Ubuntu 22.04.5 LTS 上的安装与问题处理记录
java·linux·ubuntu·openclaw·龙虾
上海合宙LuatOS11 小时前
LuatOS核心库API——【 string】字符串操作
运维·服务器·物联网·junit·硬件工程·信息与通信·嵌入式实时数据库
徐子元竟然被占了!!11 小时前
Linux的cat
linux·运维·服务器
带娃的IT创业者11 小时前
WeClaw 离线消息队列实战:异步任务队列如何保证在服务器宕机时不丢失任何一条 AI 回复?
运维·服务器·人工智能·python·websocket·fastapi·实时通信
wal131452012 小时前
OpenClaw教程(九)—— 彻底告别!OpenClaw 卸载不残留指南
前端·网络·人工智能·chrome·安全·openclaw