在局域网中通过 iPhone 访问 OpenWebUI 时,语音输入和摄像头调用常常因为缺少可信 HTTPS 环境而被 iOS 拦截。本文将从原理到实操,手把手带你在 Windows 和 RHEL 上部署 Caddy 反向代理,并完成 iPhone 端的证书信任配置,彻底解决权限弹窗不出现的问题。

在这里插入图片描述

随着 AI自然语言处理 技术的快速普及,越来越多的开发者选择在本地或内网部署 OpenWebUI 这类交互式界面,以便安全地调用大模型能力。然而,iOS 对麦克风和摄像头的权限管控极为严格——只有在浏览器确认当前页面处于受信任的 HTTPS 环境时,才会向用户弹出授权请求。这意味着,仅仅在局域网内用 HTTP 访问是远远不够的。Caddy 作为一款自动管理 TLS 证书的现代 Web 服务器,恰好能帮我们以极低成本构建这一信任链。⚠️ 注意:本文假设你已有运行中的 OpenWebUI 服务,并希望通过反向代理为其加上 HTTPS 外壳。

在这里插入图片描述

一、为什么选择 Caddy?与 Nginx 的简单对比

在传统方案中,Nginx 加 OpenSSL 手动签发证书是常见做法,但流程繁琐,尤其在内网环境中需要自行搭建 CA 并逐台设备导入根证书。Caddy 的核心优势在于默认自动启用 HTTPS,内置本地 CA,能自动为局域网域名签发证书,并生成可供分发的根证书文件。对于需要频繁调试 深度学习 模型或 神经网络 推理服务的开发者而言,这大幅降低了环境配置的心智负担。

  • ✅ 自动生成并管理本地根证书,无需手动 openssl 命令
  • ✅ 配置文件极简,几行即可完成反向代理
  • ✅ 跨平台支持良好,Windows 与 Linux 体验一致
  • ⚠️ 根证书需要手动导入 iPhone 并开启完全信任,这一步不可省略

当然,如果你已经有一套成熟的 Nginx 体系,也可以继续使用,但需要额外处理证书签发和续期。Caddy 更适合追求快速落地和低维护成本的场景。 在 机器学习 项目演示或内网工具链搭建中,这种效率提升尤为明显。

[AFFILIATE_SLOT_1]

二、Windows 平台部署 Caddy 详细步骤

如果你的 OpenWebUI 直接运行在 Windows PC 上,那么在同一台机器部署 Caddy 是最直接的选择。首先访问 Caddy 的 GitHub Releases 页面,下载适用于 Windows 的压缩包,解压后会得到 windows_amd64 可执行文件。建议将其放置在 C:\caddy\ 这类路径清晰、权限稳定的目录下,便于后续管理和开机自启。

接下来,在同一目录中新建一个文本文件,并将其重命名为 Caddyfile(注意没有后缀名)。这个文件是 Caddy 的核心配置,内容大致如下:

# 替换为你电脑的局域网 IP (例如 192.168.1.5)
192.168.x.x {
    reverse_proxy localhost:3000
    tls internal
}

配置完成后,在当前文件夹打开 CMD 或 PowerShell,输入启动命令:

.\caddy.exe run

此时 Caddy 会自动生成本地根证书。在 Windows 上,该证书通常位于用户目录下的 AppData 路径中:

C:\Users\你的用户名\AppData\Roaming\Caddy\pki\authorities\local\root.crt

小技巧:你可以直接在文件资源管理器地址栏粘贴上述路径快速定位。找到 root.crt 或类似文件后,先将其复制到桌面备用,下一步会用于 iPhone 安装。

三、RHEL 平台部署 Caddy 详细步骤

对于公司服务器环境,RHEL 是常见选择。Caddy 官方提供了便捷的仓库安装方式,执行以下命令即可完成安装:

sudo dnf install 'dnf-command(copr)'
sudo dnf copr enable @caddy/caddy
sudo dnf install caddy

安装完成后,需要编辑配置文件 /etc/caddy/Caddyfile,根据你的 OpenWebUI 实际监听端口和域名进行调整:

# 替换为 RHEL 服务器的局域网 IP
192.168.x.x {
    reverse_proxy localhost:3000
    tls internal
}

⚠️ 注意:RHEL 默认启用 firewalld,必须放行 HTTPS 相关端口,否则 iPhone 无法访问:

sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

随后启动 Caddy 服务:

sudo systemctl enable --now caddy

RHEL 上的根证书位置与 Windows 不同,通常在:

/var/lib/caddy/.local/share/caddy/pki/authorities/local/root.crt

将该文件取出并传输到 iPhone 即可。✅ 建议使用 scp 或内部文件共享服务完成传输,避免邮件附件被安全策略拦截。

四、iPhone 端证书安装与完全信任配置

这是整个流程中最关键的一步,也是语音和视频权限能否正常弹出的决定因素。请严格按照以下顺序操作:

  1. 传输证书:将上一步找到的 root.crt 文件通过 AirDrop、邮件或网页下载发送到 iPhone。点击文件后,系统会提示“已下载描述文件”。
  2. 安装描述文件:进入 设置 > 已下载描述文件,点击右上角“安装”,输入锁屏密码确认。
  3. 开启完全信任(必做):进入 设置 > 通用 > 关于本机 > 证书信任设置,在“针对根证书启用完全信任”列表中找到 Caddy Local Authority…,打开右侧开关。⚠️ 如果不开启这一步,Safari 依然会报安全警告。
  4. 访问测试:在 Safari 地址栏手动输入 https://192.168.x.x(必须包含 https)。地址栏应显示灰色或绿色小锁图标,不再出现安全警告。此时点击 OpenWebUI 的麦克风或摄像头图标,iOS 即可正常弹出授权窗口。

常见问题:如果安装描述文件后找不到“证书信任设置”入口,请确认描述文件已完全安装,且 iOS 版本在 10.3 以上。另外,部分企业 MDM 策略可能会限制根证书信任,需要联系 IT 管理员放行。

[AFFILIATE_SLOT_2]

五、方案总结与对比

为了帮助你快速判断哪种部署方式更适合当前场景,下表从多个维度进行了对比:

操作环节Windows 平台RHEL 平台
主要工具 服务 (dnf 安装)
配置文件运行目录下的
根证书路径
网络要求允许程序通过 Windows 防火墙必须执行 放行 443
iPhone 操作一致:安装证书 -> 手动开启完全信任一致:安装证书 -> 手动开启完全信任

无论选择 Windows 还是 RHEL,核心逻辑是一致的:用 Caddy 建立本地信任链,再将根证书导入 iPhone 并开启完全信任。这套方案不仅适用于 OpenWebUI,也适用于任何需要在局域网内调用 iOS 媒体权限的 Web 应用,例如基于 AI 的语音助手、实时视频分析工具等。

核心提醒:很多用户安装了证书但忘记在“关于本机”里手动开启完全信任开关,导致 HTTPS 依然失效,请务必检查该设置。

总结一下:Caddy 让内网 HTTPS 变得前所未有的简单,而 iPhone 的证书信任设置则是打通语音视频权限的最后一公里。建议在部署完成后,用 Safari 的开发者工具或 curl -v 验证证书链是否完整。✅ 掌握这套流程后,你可以将同样的方法复用到其他 机器学习 演示项目或内部工具中,让局域网内的 AI 交互体验更加顺畅。

caddy.execaddyCaddyfile/etc/caddy/CaddyfileAppData\Roaming\Caddy\.../var/lib/caddy/...firewall-cmd