[踩了个坑] Laravel 访问https网址,url('/')竟然只返回 http?
踩了个坑
最近在抄文档laravel + breeze + vue的码,部署如下:
// 开发环境
Https ---> 云服务器Nginx反向代理Http ---> vpn内网的本机Nginx ---> fpm ---> Laravel
// 生产环境
Https ---> 阿里云 ---> 负载均衡SLB Http ---> K8S ---> Nginx ---> fpm ---> Laravel
开发的时候一直用的是http协议访问,啥问题都没有。
后来看到浏览器上有个不安全提示,想着云服务器上本来就有域名证书,所以把访问协议改成https,这时候点击右上角的login、register 路由前端就报错了。

百度谷歌搜一波
laracasts.com/discuss/channels/lar...
blog.csdn.net/u010347244/article/d...
一堆大佬的招式都是建议在app/Providers/AppServiceProvider.php加上以下这个forceScheme
$url->forceScheme('https');
但并不是我想要的效果。。。
访问http就该是http,https就得自动是https才对。
只能dd()一波
routes/web.php








wocao!!!怎么到了UrlGenerator线索就断了。。。
Laravel的水真深,后来换骚操作,全局搜代码UrlGenerator

还真找到了对应的UrlGenerator






至此找到了最终的线索:
$this->isFromTrustedProxy()—已经配置过信任的代理ipself::HEADER_X_FORWARDED_PROTO—这个是新姿势!!!
百度谷歌一顿 nginx HEADER_X_FORWARDED_PROTO终于找到了对应的解决方案:
Nginx反向代理加上以下这句:
#设置向后端proxy发送X-Forwarded-Proto字段
proxy_set_header X-Forwarded-Proto $scheme;
生产环境阿里云负载均衡配置搜了下文档,找到了相应配置入口
help.aliyun.com/document_detail/86...
![[踩了个坑]访问https网址,Laravel url('/')居然返回http?](https://cdn.learnku.com/uploads/images/202204/20/15972/QmerQGTxTK.png!large)
![[踩了个坑]访问https网址,Laravel url('/')居然返回http?](https://cdn.learnku.com/uploads/images/202204/20/15972/DSmVig9kZc.png!large)
![[踩了个坑]访问https网址,Laravel url('/')居然返回http?](https://cdn.learnku.com/uploads/images/202204/20/15972/yexvzFOnOH.png!large)
![[踩了个坑]访问https网址,Laravel url('/')居然返回http?](https://cdn.learnku.com/uploads/images/202204/20/15972/hGmrsuvAzI.png!large)
搞定!
总结
- 遇到问题耐心搜索+dd(),可以掌握新姿势
- Laravel有些码从IDE跳进去看不到真实的类,可以骚操作全局搜索一下
- https反向代理http,nginx配置那要向后端proxy发送X-Forwarded-Proto字段
本作品采用《CC 协议》,转载必须注明作者和本文链接


关于 LearnKu
推荐文章: