[踩了个坑] 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 协议》,转载必须注明作者和本文链接
推荐文章: