Laravel与Laravel Orchid混合内容错误排查求助
Laravel + Orchid 混合内容错误(HTTPS登录页请求HTTP Dashboard)解决思路
问题场景
运行环境:Laravel + Laravel Orchid,AWS EC2/S3/Fargate架构;cPanel环境下代码正常,但AWS环境中出现以下问题:
- 登录页
https://website.net/admin/login通过HTTPS加载,但页面尝试请求不安全的http://website.net/admin/dashboard资源,被浏览器拦截,导致登录页面卡顿 - 已尝试的方案仅解决了图标加载的混合内容问题,核心的dashboard请求问题未解决:
- 在
AppServiceProvider.php中设置URL::forceScheme('https') - 创建强制HTTPS重定向的中间件
- 修改
.env中的ASSET_URL为HTTPS地址
- 在
针对性排查与解决步骤
1. 强制Orchid路由继承HTTPS配置
Laravel Orchid有独立的路由体系,可能未全局继承Laravel的HTTPS设置:
- 打开
config/orchid.php,给后台路由添加HTTPS强制中间件:'routes' => [ 'prefix' => env('ORCHID_ROUTE_PREFIX', 'admin'), 'middleware' => ['web', 'auth', 'force-https'], // 加入你的HTTPS中间件 ], - 或者在
app/Providers/OrchidServiceProvider.php的boot方法中直接强制HTTPS:public function boot() { parent::boot(); if (env('APP_ENV') === 'production') { \URL::forceScheme('https'); } }
2. 修复AWS负载均衡的请求头传递问题
AWS Fargate/EC2的负载均衡(ALB/NLB)可能未正确传递HTTPS标识,导致Laravel误判请求为HTTP:
- 确保负载均衡监听器已配置转发
X-Forwarded-Proto和X-Forwarded-For请求头到后端实例 - 修改
config/trustedproxy.php,让Laravel信任负载均衡的请求头:return [ 'proxies' => '*', // 生产环境建议替换为负载均衡的具体IP段 'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL, ]; - 同步在
.env中添加TRUSTED_PROXIES=*
3. 检查登录跳转逻辑的硬编码地址
确认Orchid登录后的跳转是否存在硬编码HTTP地址:
- 如果自定义了登录控制器,检查
redirectTo属性或redirectPath()方法,改用命名路由生成链接:// 替换硬编码URL为命名路由 protected $redirectTo = route('platform.dashboard');
4. 开启Session/Cookie的Secure属性
未设置Secure属性的Session/Cookie可能导致登录状态异常,进而引发跳转错误:
- 在
config/session.php中设置:'secure' => env('SESSION_SECURE_COOKIE', true), - 在
config/cookie.php中设置:'secure' => env('COOKIE_SECURE', true), - 同步在
.env中添加SESSION_SECURE_COOKIE=true和COOKIE_SECURE=true
内容的提问来源于stack exchange,提问作者Millie Majithia
相关产品推荐
相关产品推荐

