我有一个负载均衡器上的网络应用。使用https与负载均衡器的连接是安全的,我的负载均衡器使用http与我的Web服务器通信。这对我的用例来说足够安全,因为Web服务器只能接受来自已经过身份验证的负载均衡器的流量。
我的问题是我有几种使用FOSMessageBundle的表单,它使用当前方案创建路由。 Web服务器认为传入连接使用http,因此使用http生成路由。这现在成为安全风险,由于方案不一致,我无法在大多数浏览器上提交表单。
以下是我需要覆盖并更正的twig文件的行:
{% set formAction %}{{ url('fos_message_thread_undelete', {'threadId': thread.id}) }}{% endset %}
如果我对上面的fos路由要求https(using the method form the symfony docs),则生成的路由是正确的,但是在提交时会发生重定向循环,因为Web服务器无法接受https并且我的负载均衡器正在自动设置和重定向任何http到https。
我使用了一个快速而肮脏的解决方案,在我的路由中手动输入https并使用路径功能创建其余的URL,但这不是正确的编码。我测试了它,表单通过https提交给负载均衡器,然后负载均衡器将其发送到带有http的Web服务器。
有没有办法在symfony中生成一个始终使用https生成但不需要https的网址?
我正在查看文档,发现Schema-relative URLs似乎是正确的方向,但文档暗示它用于访问外部文件,而不是表单路径。有谁知道在我的情况下是否适合使用它:
{{ url('fos_message_thread_undelete', {'threadId': thread.id}, true) }}
以下是其他一些有些相似的问题,但没有人对我想要完成的事情有答案:
“require_channel: https” causes Error 310, Too Many Redirects
我正在使用apache 2.4和Symfony 2.6。
答案 0 :(得分:0)
我在twig中创建https但不要求表单提交https的问题的简单答案是使用与架构相关的URL:
{{schema_parameter}}{{ url('fos_message_thread_undelete', {'threadId': thread.id}, true) }}