[踩了个坑] Laravel 访问https网址,url('/')竟然只返回 http?

踩了个坑

最近在抄文档laravel + breeze + vue的码,部署如下:

// 开发环境
Https ---> 云服务器Nginx反向代理Http --->  vpn内网的本机Nginx ---> fpm ---> Laravel

// 生产环境
Https ---> 阿里云 ---> 负载均衡SLB Http ---> K8S ---> Nginx ---> fpm ---> Laravel

开发的时候一直用的是http协议访问,啥问题都没有。

后来看到浏览器上有个不安全提示,想着云服务器上本来就有域名证书,所以把访问协议改成https,这时候点击右上角的loginregister 路由前端就报错了。

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

百度谷歌搜一波

laracasts.com/discuss/channels/lar...
blog.csdn.net/u010347244/article/d...

一堆大佬的招式都是建议在app/Providers/AppServiceProvider.php加上以下这个forceScheme

$url->forceScheme('https');

但并不是我想要的效果。。。

访问http就该是httphttps就得自动是https才对。

只能dd()一波

routes/web.php
【踩了个坑】访问https网址,Laravel url('/')居然返回http?

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

wocao!!!怎么到了UrlGenerator线索就断了。。。

Laravel的水真深,后来换骚操作,全局搜代码UrlGenerator

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

还真找到了对应的UrlGenerator

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

【踩了个坑】访问https网址,Laravel url('/')居然返回http?

至此找到了最终的线索:

  1. $this->isFromTrustedProxy() —已经配置过信任的代理ip
  2. self::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网址,Laravel url('/')居然返回http?

[踩了个坑]访问https网址,Laravel url('/')居然返回http?

[踩了个坑]访问https网址,Laravel url('/')居然返回http?

搞定!

总结

  1. 遇到问题耐心搜索+dd(),可以掌握新姿势
  2. Laravel有些码从IDE跳进去看不到真实的类,可以骚操作全局搜索一下
  3. https反向代理http,nginx配置那要向后端proxy发送X-Forwarded-Proto字段
本作品采用《CC 协议》,转载必须注明作者和本文链接
CV专员在静静的抄你码
本帖由系统于 2个月前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 12

厉害厉害,一路追溯到源码最底层,知其然知其所以然,

2个月前 评论
leo

第二点用 PHPStorm 点一个小按钮就可以了,所以我一直推荐使用 IDE 而不是文本编辑器+插件,工作效率不是一个数量级,早点写完代码回家不好吗。

file

2个月前 评论
抄你码科技有限公司 (楼主) 2个月前

这个是我之前发的帖子 博客:记一次接口HTTPS访问,日志却记录为HTTP问题 问题跟你一样,还没解决怎么搞

2个月前 评论
抄你码科技有限公司 (楼主) 2个月前
Yoooooo (作者) 2个月前
抄你码科技有限公司 (楼主) 2个月前
Yoooooo (作者) 2个月前
抄你码科技有限公司 (楼主) 2个月前
Yoooooo (作者) 2个月前

源站前面套了 SLB 或 CDN 可能就会引发这个问题,用户实际访问的是 https,但是访问的源站走的是 http,CDN 上可以改设置,让协议跟随

2个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!