Laravel配置力量https

时间:2015-02-13 09:34:35

标签: php url laravel ssl configuration

我们的网站托管在负载均衡的服务器上。 SSL卸载在防火墙上完成,因此客户端反向代理到Web服务器场。

当https请求到达我们的Laravel应用程序时,服务器变量HTTPS为空,Laravel似乎无法检测到https模式并生成网址(资产和路径):

有没有办法配置Laravel强制网址生成https链接? 我们更喜欢配置解​​决方案,因为我们的开发和暂存环境不能在https下运行。

注意: 我们已经尝试过" trustedproxy"来自fideloper的方法,这导致没有变化。 我认为.htaccess重写不是一个选项,因为htaccess重写基于相同的https标题(我们不接收)或端口(80,laravel调用端口443)。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

Laravel的UrlGenerator类有一个名为forceSchema的方法,它允许您强制使用架构并忽略从请求的URL中提取的架构。只需创建一个服务提供者SecureRoutingServiceProvider,它使用Laravel的IOC覆盖默认生成器并返回强制安全模式的实例:

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();
    }
}

接下来,我们需要通过将服务提供商添加到providers中的app/config/app.php数组来注册服务提供商:

'providers' => array(
    ...,
    'SecureRoutingServiceProvider',
)

这就是它的全部内容。我已经测试了这段代码并且工作正常(在Laravel 4.2中)。

答案 1 :(得分:0)

使用Laravel 5分页功能处理同样的问题。因为它不足以强制生成Generator中的URL Schema,因为它使用与Request关联的URL。在挖掘之后我找到了一个很好的解决方案。

Illuminate\Http\Request有一个trustedProxies数组,基本上就是这种情况。

我仍然使用Bogdan的SecureRoutingServiceProvider作为我们的Load Balancer白名单的起点。

public function boot()
{
    Request::setTrustedProxies(['10.0.0.X']); // Here should be your internal LB IP

    parent::boot();
}

之后它运作得很好。当然你应该把IP放在config / env文件中。