2013-10-16 101 views
2

我正在为安全配置一个新的symfony安装,但我的登录表单不会表现。无论何时我被重定向到登录页面,symfony都会重定向到https,并将80添加到域中。Symfony安全强制HTTPS尽管requires_channel http

这里是我的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调用调用原始请求对象的geturi”功能。

跟踪这一点,原因至今是Request对象的ServerBag有HTTPS = ON>。

如该得到的我还没有想出设置虽然

+1

听起来像它可能是一个htaccess的事情。你在那里有什么? – Chausser

+0

没有.htaccess文件。 Nginx配置为忽略它们,我唯一拥有的应用是/,它只是说“拒绝所有” – Fodagus

+1

这似乎仍然是与你的web服务器不同,而不是使用symfony。我会在你的项目中搜索“80”,排除你的供应商,看看你是否在任何地方设置端口。如果你无法找到一个位置,那么它可能是一个Web服务器重定向。 – Chausser

回答

1

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

+1

对于任何人在谷歌这个磕磕绊绊,特别是它是我的Nginx的配置/ etc/nginx/... FastCGI有这个选项设置: fastcgi_param HTTPS; 评论说已经修好了。 – Fodagus

3

(对于nginx)虽然现有答案表明您可以注释掉fascgi_param HTTPS on;但是,对于某些配置,他们需要该名称。更好的解决方案是在url为https时启用它,当它不是时则将其关闭。

幸运的是,在nginx配置文件中,如果它的安全端口为$https则设置为“on”,如果不是,则设置为“off”。所以这应该工作:

fascgi_param HTTPS $https; 

如果您使用的是旧版本的nginx的(预1.1.11),$https没有定义,所以你可以在你的配置文件手动启动。

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

不完全回答这个问题,但它帮助我强制symfony在varnish,负载平衡器和其他2个代理之后使用https。谢谢! –