Luk*_*uke 11
@AL和@AndreySobkanyuk给出的两种解决方案都是有效的,但不适用于我遇到的问题.
@AL和@AndreySobkanyuk提供的两种解决方案的问题在于Symfony 2正在尝试重定向.即,如果通过协议(例如HTTP)访问URL(在路由配置中以不同方式指定(例如HTTPS)),Symfony 2将执行重定向(在PHP级别).
在我的情况下,URL重写发生在Web服务器级别(Apache),因为我的网站将所有URL都作为HTTPS提供.
我正在处理的问题是我的模板中生成的URL都是使用HTTP协议呈现的,如果它们应该是HTTPS.我假设有一种方法告诉Symfony每当它呈现一个URL,用HTTPS而不是HTTP作为前缀.不幸的是,没有(或者至少,我没有意识到).
由于我的网站在负载均衡器后面运行,我的Web服务器不知道它应该将URL呈现为HTTPS,因为负载均衡器和Web服务器之间的内部连接是HTTP.这意味着从Symfony的角度来看,所有请求都是使用HTTP进行的,并且通过在Symfony路由级别强制协议,它导致无限重定向循环,即;
为了解决我的问题,我必须让我的网络服务器知道我的网站在HTTPS中运行的事实.按照如何在负载均衡器或反向代理页面后面的如何配置Symfony工作的说明我能够解决问题,即我的Web服务器现在正在提供正确的头信息,现在生成正确的URL .
将所需标头从负载均衡器传递到Web服务器的最简单方法是将以下行添加到web/app.php:
Request::setTrustedProxies(array($request->server->get('REMOTE_ADDR')));
Run Code Online (Sandbox Code Playgroud)
请注意,上述可能不是您特定配置的最佳解决方案.有关可能更适合您的设置的其他方法,请参阅文档.
我发现这对我的情况有用(使用nginx)
添加到nginx fcgi params以下行,这是必需的,因为Symfony2依赖于此变量,由Web服务器传递给PHP,以生成正确的URL.Apache默认执行此操作,但nginx需要此特殊配置.
fastcgi_param HTTPS on;
http://blog.servergrove.com/2011/04/04/symfony2-quick-tip-generateurl-with-https-on-nginx/
要强制HTTPS进入生产环境,可以使用以下配置:
在你的app/config/routing.yml:
acme_hello:
resource: "@AcmeHelloBundle/Resources/config/routing.yml"
schemes: [https]
Run Code Online (Sandbox Code Playgroud)在你的添加中app/config/routing_dev.yml:
_main:
resource: routing.yml
schemes: [http]
Run Code Online (Sandbox Code Playgroud)
如果你想强制HTTP开发环境中的所有路由.
在你的@AcmeHelloBundle/Resources/config/routing.yml你可以放置你所有的路线.
有关schemes: [https]使其工作的更多信息和其他方法,您可以查看Symfony文档.
| 归档时间: |
|
| 查看次数: |
7404 次 |
| 最近记录: |