[踩了个坑] 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...
搞定!
总结
- 遇到问题耐心搜索+dd(),可以掌握新姿势
- Laravel有些码从IDE跳进去看不到真实的类,可以骚操作全局搜索一下
- https反向代理http,nginx配置那要向后端proxy发送X-Forwarded-Proto字段
本作品采用《CC 协议》,转载必须注明作者和本文链接
厉害厉害,一路追溯到源码最底层,知其然知其所以然,
第二点用 PHPStorm 点一个小按钮就可以了,所以我一直推荐使用 IDE 而不是文本编辑器+插件,工作效率不是一个数量级,早点写完代码回家不好吗。
功夫不负有心人
这个是我之前发的帖子 博客:记一次接口HTTPS访问,日志却记录为HTTP问题 问题跟你一样,还没解决怎么搞
源站前面套了 SLB 或 CDN 可能就会引发这个问题,用户实际访问的是 https,但是访问的源站走的是 http,CDN 上可以改设置,让协议跟随
好吧,我也踩到这个坑了。mark
:+1: