nginx 中的 Symfony https + varnish + apache http = 重定向循环或

Symfony in nginx https + varnish + apache http = redirect loop or

我有配置 nginx 中的 Symfony https + varnish + apache http = redirect loop

我设置路由方案以获取链接 https : ['https'] 但得到重定向循环为什么? 看起来 symfony 不仅创建了与 https 的链接,而且 return 如果获得 http 则重定向 - 我需要 http 页面用于在 varnish 中缓存但链接 https。

更新1 当我在路由中没有设置模式并且 运行 页面通过 https 时几乎一切正常 - 没有

1 fos 路由它创建绝对 http 链接

2 liip 想象同样的情况

如果您在访问页面时尽管使用了 https 但仍收到重定向到 https 的信息,则原始协议不会转发到处理响应的后端。

有一个 header X-Forwarded-Proto 应该设置为在通过任何代理之前包含原始协议。 Symfony 应该尊重这个 header 并接受请求是安全的而不是重定向(并且如果合适的话也将所有链接设置为 https:// urls)

您需要配置 Apache(我假设它正在终止 https 连接并具有证书)以设置此 header 以匹配原始请求协议。

看起来您可能需要在 Symfony 遵守 headers Symfony Docs for proxies

之前信任代理
// public/index.php

// ...
$request = Request::createFromGlobals();

// tell Symfony about your reverse proxy
Request::setTrustedProxies(
    // the IP address (or range) of your proxy
    ['192.0.0.1', '10.0.0.0/8'],

    // trust *all* "X-Forwarded-*" headers
    Request::HEADER_X_FORWARDED_ALL
);