跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

phpEnv如何开启OpenSSL支持本地HTTPS phpEnv证书配置

phpEnv需依赖Nginx与OpenSSL协同实现HTTPS:一、确认PHP加载openssl扩展(Windows下为php_openssl.dll);二、用mkcert生成可信本地证书并导入系统根证书库;三、在phpEnv域名管理中正确配置绝对路径的.pem与.key文件;四、Nginx server块中添加fastcgi_param HTTPS on及TLS协议与密钥套件;五、 hosts绑定自定义域名并使用协议相对路径避免混合内容。 php Env 本身不内置 HTTPS 支持,必须依赖底层 Web 服务器(Nginx)和 OpenSSL 扩展协同工作;开启 OpenSSL 是前提,但仅启用扩展远远不够——证书路径、Nginx 配置、浏览器信任链三者缺一不可。 确认 phpEnv 中的 PHP 已加载 open ssl 扩展 很多人卡在第一步:以为勾选了 SSL 就万事大吉,结果
file_get_contents("https://")
仍报
SSL operation failed
。真实原因是 phpEnv 启动的 PHP 进程没加载 openssl。 打开 phpEnv 控制面板 → 点击「PHP 设置」→ 查看当前 PHP 版本对应的实际
php.ini
路径(别信默认路径,用
php --ini
命令验证) 编辑该
php.ini
,搜索
extension=openssl
:Windows 下必须是
extension=php_openssl.dll
,且确保
php_openssl.dll
文件真实存在于
ext/
目录 保存后,在 phpEnv 面板中「重启 PHP 服务」(不是只重启 Nginx),然后运行
php -r "var_dump(extension_loaded('openssl'));"
,输出
bool(true)
才算通过 用 mkcert 生成可信本地证书(比手敲 openssl 更稳) phpEnv 的 Nginx 默认不信任自签名证书,浏览器会拦截;
mkcert
生成的证书会被系统根证书库自动信任,避免每次点「高级→继续访问」。 以管理员身份打开 PowerShell,执行:
choco install mkcert
(若未装 Chocolatey,先按官网流程安装) 运行
mkcert -install
,弹出窗口点「安装」到「受信任的根证书颁发机构」 在 phpEnv 项目目录(如
C:\phpenv\www\myapp
)下执行:
mkcert myapp.test
,生成
myapp.test.pem
(证书)和
myapp.test-key.pem
(私钥) 注意:不要直接把 .pem 文件丢进 phpEnv 的证书选择框——它要求 PEM 格式但常因换行或 BOM 报错;用记事本另存为 UTF-8 无 BOM 格式再试 在 phpEnv 中正确绑定证书到 Nginx 虚拟主机 phpEnv 的「域名管理」界面看似简单,但证书路径填错会导致 Nginx 启动失败,日志里只显示
nginx: [emerg] SSL_CTX_use_certificate_chain_file() failed
。 稿定在线PS PS软件网页版 下载 立即学习 “ PHP免费学习笔记(深入) ”; 右键目标域名 → 「配置 SSL」→ 在「证书文件」栏填绝对路径,例如:
C:/phpenv/www/myapp/myapp.test.pem
(反斜杠会出错,必须用正斜杠或双反斜杠) 「私钥文件」栏填:
C:/phpenv/www/myapp/myapp.test-key.pem
关键细节:phpEnv 的 Nginx 配置模板默认不加
ssl_protocols TLSv1.2 TLSv1.3;
和
ssl_ciphers
,老旧客户端可能握手失败;建议手动编辑生成的
nginx.conf
(位于
C:\phpenv\conf\nginx\
对应域名配置块),补上这两行 保存后,phpEnv 会自动重载 Nginx;若失败,去
C:\phpenv\logs\nginx\error.log
查具体哪一行配置语法错误 绕过混合内容与 $_SERVER['HTTPS'] 检测失效问题 即使 HTTPS 能打开,PHP 代码里
$_SERVER['HTTPS']
仍是空,或者页面加载 HTTP 资源被浏览器阻止——这通常是因为 Nginx 没把 HTTPS 状态透传给 PHP。 检查 phpEnv 自动生成的 Nginx server 块里是否有:
fastcgi_param HTTPS on;
(没有就手动加上,放在
include fastcgi.conf;
之后) 前端资源(CSS/JS/图片)地址不能写死
http://
,改用协议相对路径:
//myapp.test/css/app.css
,或用 PHP 判断:
echo ($_SERVER['HTTPS'] ?? '') === 'on' ? 'https' : 'http';
如果用了 Laravel 或 WordPress 等框架,还需在配置里显式设
APP_URL=https://myapp.test
,否则生成的链接仍是 http 最易忽略的是:mkcert 生成的证书只对指定域名有效,
localhost
和
127.0.0.1
不在信任范围内;开发时务必用
myapp.test
这类自定义域名,并在
C:\Windows\System32\drivers\etc\hosts
里加一行
127.0.0.1 myapp.test
。

相关文章