Symfony安全强制HTTPS尽piperequires_channel http

我正在为安全性configuration一个新的symfony安装,但我的login表单将不会performance。 无论何时我被redirect到login页面,symfonyredirect到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 

我的loginpath控制器的路由文件:

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

当我访问主页时,我被redirect到:

 https://myserver.com:80/login 

…显然不工作,因为我没有configurationSSL …

我试着改变loginpath的path,它会更新到指向新的path,所以它肯定读取configuration文件…

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

更新:

我正在用debugging器和打印语句深入内核。

到目前为止,我可以确定它是这样做的,因为当身份validation失败(因为它应该),为“login_path”生成一个redirect响应。 generateUri调用调用原始的Request对象geturi函数。

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

我还没有弄清楚哪里设置了。

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

(对于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; }