php - ELB 后面的 Symfony2 重定向到 http 而不是 https

标签 php .htaccess symfony redirect amazon-elb

问题:

security.yml:

security:

    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        main:
            pattern:    ^/
            form_login:
                check_path: /login_check
                login_path: /login
                default_target_path: /profile
                provider: fos_userbundle
            logout:
                path:   /logout
                target: /splash
            anonymous: ~

    access_control:
        - { roles: ROLE_USER, requires_channel: https }
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }

    acl:
        connection: default

环境架构:

enter image description here

Server1 和 Server2 持有 Symfony2 应用程序。

问题:

如何强制 Symfony 使用 https 协议(protocol)而不是 http 生成重定向 URL?

到目前为止,我已经查看了这些文档,但解决方案在我的案例中不起作用:

最佳答案

看看

vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/Request.php

AWS ELB 使用 HTTP_X_FORWARDED_PROTO 和 HTTP_X_FORWARDED_PORT,而 Symfony 查看 X_FORWARDED_PROTO 和 X_FORWARDED_PORT header 来判断连接及其安全状态。

您可以尝试更改 trustedHeaders 中的这些 key ,但我不建议直接更改它们,而是想办法覆盖它们。

protected static $trustedHeaders = array(
        self::HEADER_CLIENT_IP    => 'X_FORWARDED_FOR',
        self::HEADER_CLIENT_HOST  => 'X_FORWARDED_HOST',
        self::HEADER_CLIENT_PROTO => 'HTTP_X_FORWARDED_PROTO',
        self::HEADER_CLIENT_PORT  => 'HTTP_X_FORWARDED_PORT',
    );

引用 - http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#x-forwarded-for

关于php - ELB 后面的 Symfony2 重定向到 http 而不是 https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23621042/

相关文章:

php - PHP session 是否难以跨分布式系统扩展?

.htaccess - mod_rewrite GUI?

php - PDO查询优化

symfony - Doctrine :多对多在事件监听器内删除关联对象

Phpseclib sftp put 超过 1 GB 的文件内存不足

php - 防止在 Zend 框架中重新提交表单?

php - mysqli_stmt::execute() 需要 0 个参数,1 个给定错误

php - Laravel htaccess,将特定 URL 重定向到其他文件夹

regex - .htaccess mod_rewrite 超薄路由

ajax - 如何将 Ajax 与 Symfony2 集成