Symfony Security Forces HTTPS尽管require_channel http

时间:2013-10-16 19:28:48

标签: php symfony nginx

我正在为安全性配置新的symfony安装,但我的登录表单不会运行。每当我被重定向到登录页面时,symfony都会重定向到https并将80添加到域中。

这是我的security.yml

# app/config/security.yml
security:
    firewalls:
        login:
            pattern: ^/login
            anonymous: true
        main:
            pattern:    ^/
            anonymous:  false
            form_login:
                login_path: /login
                check_path: /login_check
            logout:
                path:   /logout
                target: /home

    access_control:
        - { path: ^/login$,    roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: http  }
        - { path: ^/secure, roles: IS_AUTHENTICATED_FULLY }
        - { path: ^/secure/max, roles: ROLE_ADMIN }

    providers:
        in_memory:
            memory:
                users:
                    ryan:  { password: ryanpass, roles: 'ROLE_USER' }
                    admin: { password: kitten, roles: 'ROLE_ADMIN' }

    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

我的登录路径控制器的路由文件:

login:
    pattern: /login
    defaults: { _controller: RGCoreBundle:Default:login }

login_check:
    pattern: /login_check

当我访问主页时,我被重定向到:

https://myserver.com:80/login

...显然无法正常工作,因为我没有配置SSL ......

我已经尝试更改登录路径的路径,它会更新为指向新路径,所以它肯定会读取配置文件......

我还应该在哪儿看?这是一个全新的安装,我已经消灭了ACME捆绑包。

更新

我正在使用调试器和打印语句潜入内核。

到目前为止,我可以确定它正在执行此操作,因为当身份验证失败时(应该如此),会为“login_path”生成重定向响应。对generateUri的调用调用原始的Request对象'geturi'函数。

跟踪这个,到目前为止的原因是Request对象的ServerBag具有HTTPS =>上。

我还没弄清楚那个设置在哪里。

2 个答案:

答案 0 :(得分:3)

(对于nginx)虽然现有答案表明您可以注释掉fascgi_param HTTPS on;但是,对于某些配置,他们需要指定。更好的解决方案是在网址为https时将其启用,并在网址为关闭时将其关闭。

幸运的是,在nginx配置文件中,$https设置为" on"如果它是一个安全的端口,并且"关闭"如果它不是。所以这应该有效:

fascgi_param HTTPS $https;

如果您使用的是旧版本的nginx(1.1.11之前版本),则$https未定义,因此您可以在配置文件中手动执行此操作。

if ($server_port = 443) { set $https on; }
if ($server_port = 80) { set $https off; }

答案 1 :(得分:1)

根据您的安全文件,它似乎不是symfony问题。可能有一些配置,您的Web服务器重定向到https和端口80.如果您无法找到我将在您的项目中执行文件文本搜索“80”并查看是否有任何重定向到该端口和可能https将在同一地点