使用 Laravel Octane 后无法加载静态资源

分类: 编程
日期: 2022-01-08
浏览: 932

问题复现

不二在写代码时喜欢使用 asset 函数,用这个函数有个好处是,可以根据输入的字符自动检索静态文件,而不必全部手动输入。

这种方式在 Nginx + php-fpm 的模式下,尚未出现问题,但是在 Laravel Octane 即 Nginx + Swoole 下就遇到了静态资源无法加载的问题。

从报错信息可以看出,通过 https 方式访问了网站,但是静态资源还是通过 http 加载的,属于混入内容,浏览器认为是不安全的,这种方式从 Chrome 84 就已经被禁止了。

解决方案

从函数入手

asset 函数传入第二个参数 true,或者将 asset 函数更换为 secure_asset 函数。这种方式虽然可以解决问题,但不是最优的方案。

弊端:

  1. 多处使用就要多处替换,容易遗漏,虽然可以全局替换,总归是有点麻烦。
  2. 一般开发环境都是 http 使用 secure_asset 会导致开发环境无法加载静态资源。
全局转换

App\Providers\AppServiceProviderboot 方法中添加以下代码,通过判断当前环境,如果是正式环境则全局使用 https。

if (app()->environment('production')) {
    URL::forceScheme('https');
}
修改配置

config/octane.php 配置文件中 OCTANE_HTTPS 设置为 true,在 .env 中添加以下代码,这是最优方案!

OCTANE_HTTPS=true

注意:一定要重启 Octane 服务!

php artisan octane:reload
版权声明
作者:不二
来源:不二博客
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论
赶快发表评论吧~
发表评论