Silex将端口80重定向到位置

时间:2013-02-15 01:53:27

标签: php symfony silex openshift

我有一个使用Silex和安全防火墙的应用程序。当我在https://app.com/web加载我的应用并且我未经过身份验证时,我会被重定向到https://app.com:80/web/user/login_check

这会产生SSL错误,因为我试图在非ssl端口上建立ssl连接。

我的防火墙配置如下所示,

$app['security.firewalls'] = array(
'login' => array(
    'pattern' => '^/user/login$',
),
'admin' => array(
    'pattern' => '^.*$',
    'form' => array('login_path' => '/user/login', 'check_path' => '/user/login_check'),
    'logout' => array('logout_path' => '/user/logout'),
    'users' => array(
        // raw password is demo
        'test' => array('ROLE_ADMIN', 'qldD7MO0Ol7e2LijC1qdNxQJpkIdHQLPjHUM0rN/N6AjEHqGzZFsYPh94R/AeFrM8aEt9Y6L$
    ),
),
);

我知道我可以在没有添加端口的情况下访问https://app.com/web/index.php,因此它不是我的网络服务器,当我被重定向到/ user / login页面时。

我读到symfony不使用url中的端口,而是使用_SERVER SERVER_PORT中定义的端口,设置

$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PORT'] = 443;

不帮助我。

重定向的初始请求会在其标题中返回此内容,

请求网址:https://app.com/web/ 请求方法:GET 状态代码:302找到

位置:https://app.com:80/web/user/login

有人知道如何阻止silex的重定向将端口80添加到该位置吗?

编辑:我应该提到这是在Redhat的OpenShift云基础架构上运行的。

1 个答案:

答案 0 :(得分:3)

理论上,您应该能够通过在请求中设置“受信任代理”来解决此问题,如此处所述http://symfony.com/blog/security-release-symfony-2-0-19-and-2-1-4

我在使用CloudFlare时遇到了这个问题,但是它有数百个IP,将它们全部列为“可信”是不切实际的,所以这是我能够解决问题的最简单方法。我把它放在autoloader之前的bootstrap文件的顶部:

// Fix IP for cloudflare
if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
    $_SERVER['HTTP_X_FORWARDED_FOR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
    $_SERVER['HTTP_CLIENT_IP'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
}

// Fix SSL for cloudflare
if (isset($_SERVER['HTTP_CF_VISITOR'])) {
    if (preg_match('/https/i', $_SERVER['HTTP_CF_VISITOR'])) {
        $_SERVER['HTTPS'] = 'On';
        $_SERVER['HTTP_X_FORWARDED_PORT'] = 443;
        $_SERVER['SERVER_PORT'] = 443;
    }
}