最近在抄文档 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() — 已经配置过信任的代理 ip
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...
搞定!
总结
遇到问题耐心搜索 + dd (),可以掌握新姿势
Laravel 有些码从 IDE 跳进去看不到真实的类,可以骚操作全局搜索一下
https 反向代理 http,nginx 配置那要向后端 proxy 发送 X-Forwarded-Proto 字段
有话要说