我正在为安全性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; }