loadbalancer重定向上的laravel“invalid host”

时间:2014-01-21 11:10:36

标签: laravel reverse-proxy

背景:我正在研究我在ec2服务器上托管的api。我刚刚完成登录并设置了一个nginx loadbalancer,它重定向到所述服务器的内部ip。域名指向负载均衡器。

这曾经与代码点火器配合使用,但现在我不断遇到“无效主机”问题。

我尝试使用谷歌搜索它,它找到了一些关于trusted proxies的内容,所以我安装了fideloper制作并尝试了他的帖子(我在laravel-4-trusted-proxies跟随了fideloper的指南并使用并尝试了他的github上的可信样本:fideloper/TrustedProxy)但我仍然得到同样的错误:

UnexpectedValueException
Invalid Host "api.myserver.im, api.myserver.im"

    // as the host can come from the user (HTTP_HOST and depending on the configuration, SERVER_NAME too can come from the user)
    // check that it does not contain forbidden characters (see RFC 952 and RFC 2181)
    if ($host && !preg_match('/^\[?(?:[a-zA-Z0-9-:\]_]+\.?)+$/', $host)) {
        throw new \UnexpectedValueException(sprintf('Invalid Host "%s"', $host));
    }

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

我也有同样的问题。我不得不求助于修改UrlGenerator.php文件,这是框架的一部分(我知道不好......)只是为了让它工作。

所以这里是我的"临时"溶液

为app.php配置文件创建一个数组值。 e.g:

return array(
    'rooturl'   => 'https://www.youractualdomainname.com',
    ...

接下来在UrlGenerator.php文件中添加以下修改< - (trunk / vendor / laravel / framework / src / Illuminate / Routing / UrlGenerator.php)

<?php namespace Illuminate\Routing;
use Config;
...
protected function getRootUrl($scheme, $root = null)
{
    $approoturl = Config::get('app.rooturl');

    $root = isset($approoturl) ? $approoturl : $this->request->root();

    return $root;

    // if (is_null($root))
    // {
    //  $root = $this->forcedRoot ?: $this->request->root();
    // }

    // $start = starts_with($root, 'http://') ? 'http://' : 'https://';

    // return preg_replace('~'.$start.'~', $scheme, $root, 1);
}

请注意,编辑器更新将恢复您的修改。