frankenphp 1.3 的 https 由集成的 caddy 处理,推荐用 mkcert 生成含 san 的自签名证书(如 localhost、127.0.0.1),配置 caddyfile 的 tls 指令指定证书路径,并确保 php_server 存在以正确设置 $_server['https'] 和 $_server['http_x_forwarded_proto']。

FrankenPHP 1.3 本身不直接处理 SSL/TLS 终止,HTTPS 配置完全由它集成的 Caddy 服务器负责。自签名证书适用于本地开发、测试或内网环境,无需 Let’s Encrypt 或公网域名验证,但需确保浏览器/客户端信任该证书。
生成可信的自签名证书(推荐用 mkcert)
手动用 OpenSSL 生成的证书常因缺少 subjectAltName(SAN) 被现代浏览器拒绝(如 Chrome 报 NET::ERR_CERT_INVALID)。mkcert 是最稳妥的选择:
- 安装 mkcert:
brew install mkcert nss(macOS)、choco install mkcert(Windows)或按 官方说明 安装 Linux 版本 - 运行一次初始化:
mkcert -install(将根证书加入系统信任库) - 为本地环境生成证书:
mkcert localhost 127.0.0.1 ::1 - 生成两个文件:
localhost+2.pem(证书)和localhost+2-key.pem(私钥)
在 Caddyfile 中启用自签名 HTTPS
FrankenPHP 默认读取当前目录的 Caddyfile。配置时跳过自动 HTTPS(ACME),直接指定证书路径:
{<br> frankenphp {<br> num_threads auto<br> }<br>}<br><br>localhost {<br> tls ./localhost+2.pem ./localhost+2-key.pem<br> encode zstd br<br> php_server<br>}
注意:
• tls 指令后跟的是 相对路径(如 ./ 开头)或绝对路径,确保文件可读(权限建议 600)
• 不要加 https:// 前缀,Caddy 会自动监听 443 和 443/udp(HTTP/3)
• 若用 127.0.0.1 访问,确保证书中包含该 SAN,mkcert 已默认覆盖
启动并验证 HTTPS 是否生效
在项目根目录执行:
frankenphp run
然后访问:
• https://localhost —— 浏览器应显示“连接安全”(首次访问可能需点击“高级 → 继续访问”)
• curl -I https://localhost --insecure —— 响应头含 HTTP/2 或 HTTP/3 即表示 TLS 已启用
• 检查 HTTP/3:运行 curl -I https://localhost --http3 --insecure,若返回 alt-svc 头则成功
PHP 中正确识别 HTTPS 状态
FrankenPHP + Caddy 会自动设置 $_SERVER['HTTPS'] = 'on' 和 $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'https',无需额外 fastcgi_param。验证方式:
<?php var_dump($_SERVER['HTTPS'], $_SERVER['HTTP_X_FORWARDED_PROTO']); ?>
输出应为:string(2) "on" 和 string(5) "https"。若为空,检查 Caddyfile 中是否漏掉 php_server 指令或路径拼写错误。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











