Laravel 配置强制 https
Laravel configurate force https
我们的网站托管在负载平衡服务器上。 SSL 卸载在防火墙上完成,因此客户端被反向代理到 Web 服务器场。
当 https 请求到达我们的 Laravel 应用程序时,服务器变量 HTTPS 为空并且 Laravel 似乎没有检测到 https 模式并生成 urls(资产 &路线)如:
有没有办法配置 Laravel 以强制 url 生成 https 链接?
我们更喜欢配置解决方案,因为我们有一个不在 https.运行 下的开发和暂存环境。
注意事项:
我们已经尝试了 fideloper 的 "trustedproxy" 方法,结果没有任何变化。
我认为 .htaccess 重写不是一个选项,因为 htaccess 重写基于相同的 https header(我们没有收到)或端口(80,laravel 调用端口 443)。
感谢您的帮助。
Laravel 的 UrlGenerator
class 有一个名为 forceSchema
的方法,它允许您强制使用模式并忽略从请求中提取的模式URL。只需创建一个服务提供者 SecureRoutingServiceProvider
,它使用 Laravel 的 IOC 来覆盖默认生成器和 return 一个强制安全模式的实例:
use Illuminate\Routing\UrlGenerator;
use Illuminate\Routing\RoutingServiceProvider;
class SecureRoutingServiceProvider extends RoutingServiceProvider
{
public function boot()
{
App::bind('url', function () {
$generator = new UrlGenerator(
App::make('router')->getRoutes(),
App::make('request');
});
$generator->forceSchema('https');
return $generator;
}
parent::boot();
}
}
接下来我们需要通过将服务提供者添加到 app/config/app.php
中的 providers
数组来注册服务提供者:
'providers' => array(
...,
'SecureRoutingServiceProvider',
)
仅此而已。我已经测试了这段代码并且它工作正常(在 Laravel 4.2)。
正在处理与 Laravel 5 分页功能相同的问题。为此,仅在生成器中强制使用 URL 模式是不够的,因为它使用与请求关联的 URL。挖掘后我找到了一个很好的修复。
Illuminate\Http\Request
有一个基本用于这种情况的 trustedProxies 数组。
我仍然使用来自 Bogdan 的 SecureRoutingServiceProvider
作为将我们的负载均衡器列入白名单的起点。
public function boot()
{
Request::setTrustedProxies(['10.0.0.X']); // Here should be your internal LB IP
parent::boot();
}
之后效果很好。当然,您应该将 IP 放在 config/env 文件中。
我们的网站托管在负载平衡服务器上。 SSL 卸载在防火墙上完成,因此客户端被反向代理到 Web 服务器场。
当 https 请求到达我们的 Laravel 应用程序时,服务器变量 HTTPS 为空并且 Laravel 似乎没有检测到 https 模式并生成 urls(资产 &路线)如:
有没有办法配置 Laravel 以强制 url 生成 https 链接? 我们更喜欢配置解决方案,因为我们有一个不在 https.运行 下的开发和暂存环境。
注意事项: 我们已经尝试了 fideloper 的 "trustedproxy" 方法,结果没有任何变化。 我认为 .htaccess 重写不是一个选项,因为 htaccess 重写基于相同的 https header(我们没有收到)或端口(80,laravel 调用端口 443)。
感谢您的帮助。
Laravel 的 UrlGenerator
class 有一个名为 forceSchema
的方法,它允许您强制使用模式并忽略从请求中提取的模式URL。只需创建一个服务提供者 SecureRoutingServiceProvider
,它使用 Laravel 的 IOC 来覆盖默认生成器和 return 一个强制安全模式的实例:
use Illuminate\Routing\UrlGenerator;
use Illuminate\Routing\RoutingServiceProvider;
class SecureRoutingServiceProvider extends RoutingServiceProvider
{
public function boot()
{
App::bind('url', function () {
$generator = new UrlGenerator(
App::make('router')->getRoutes(),
App::make('request');
});
$generator->forceSchema('https');
return $generator;
}
parent::boot();
}
}
接下来我们需要通过将服务提供者添加到 app/config/app.php
中的 providers
数组来注册服务提供者:
'providers' => array(
...,
'SecureRoutingServiceProvider',
)
仅此而已。我已经测试了这段代码并且它工作正常(在 Laravel 4.2)。
正在处理与 Laravel 5 分页功能相同的问题。为此,仅在生成器中强制使用 URL 模式是不够的,因为它使用与请求关联的 URL。挖掘后我找到了一个很好的修复。
Illuminate\Http\Request
有一个基本用于这种情况的 trustedProxies 数组。
我仍然使用来自 Bogdan 的 SecureRoutingServiceProvider
作为将我们的负载均衡器列入白名单的起点。
public function boot()
{
Request::setTrustedProxies(['10.0.0.X']); // Here should be your internal LB IP
parent::boot();
}
之后效果很好。当然,您应该将 IP 放在 config/env 文件中。