简介
我遇到了一个问题,我有 laravel-echo-server 作为守护进程在 Laravel Forge 服务器上运行。
问题是,一段时间后,当 echo 尝试连接到服务器时,每个用户都会收到 ERR_CERT_DATE_INVALID 错误。但是,我的网站强制使用 https,页面正在加载且安全。我验证了我的证书日期,一切都很好。
此后我终于意识到监督
laravel-echo-server start
的守护进程很久以前就在运行了。所以我手动重新启动它,一切又开始正常工作。
所以,我认为问题是在第一次启动时,laravel-echo-server 获取证书并将其缓存。然后,如果不需要重新启动并且当前日期晚于有效日期,即使 Forge 自动续订我们的证书,我们也会开始收到错误,因为 laravel-echo-server 不会在续订时重新加载证书。
问题
如何续订 laravel-echo-server 使用的证书以避免出现 ERR_CERT_DATE_INVALID 错误?
服务器
首先要知道Laravel Forge什么时候更新我们的证书?
回复是那里
Forge 将在每周日的随机时间和分钟自动开始更新您的证书,以避免压垮 Let’s Encrypt 服务器。
之后是为了知道证书的有效期是多长时间。使用Google Chrome工具后,我发现证书的有效期为90天。我没有任何其他来源。
从那时起,强制关闭 laravel-echo-server 将使我们的守护进程重新启动它并获取新证书。一个简单的计划工作就可以解决这个问题。
//app/Console/Kernel.php
$schedule->call(function () {
shell_exec('laravel-echo-server stop');
})->weeklyOn(1, '1:00');
我把工作定在周一凌晨 1 点。由于 Forge 在周日随机进行,所以我选择周一以确保证书已更新。
通过每周这样做,我将确保 laravel-echo-server 使用的证书永远不会过时。
您提出的解决方案对我来说不起作用。
我有相同的服务器设置:
对我有用的解决方案是在 Forge 中创建一个计划的 CRON 作业,它每个月都会杀死该进程。 由于 daemon 确保进程再次启动,我认为这个 解决方案对于生产来说是安全的(当然,如果您的应用程序不允许 laravel-echo-server 每月几秒的停机时间,则有例外)。
我的复发是每月的第一天。 证书每 90 天更新一次,因此重新启动 3 次该过程应该足够了。
步骤:
pkill -f "laravel-echo-server"
00 03 1 * *
(这意味着每月第一天的 3 小时 00 分钟运行。