2

一个 Symfony 2.3 应用程序在一个带有 nginx 端口 80 的 Web 服务器上。Varnish4 在一个端口 80 上的前端服务器上运行,Nginx 在端口 443 上作为 SSL 终结器。这也使用 Varnish3 进行了测试,结果相同。大多数情况下,这非常有效!

几分钟后,一些 ESI 使用完整的 Symfony 模板返回 403 Forbidden 错误。我相信当缓存的片段过期时会发生这种情况。

我可以通过以下方式强制解决问题:

  1. 重启 Varnish 清除缓存
  2. 通过 HTTP 加载页面(一切正常)
  3. 通过 HTTPS 加载页面(一切正常)
  4. 等待某些 ESI 从缓存中过期
  5. 通过 HTTPS 加载页面(此处发生错误)
  6. 通过 HTTP 加载页面(一切正常)

我也可以通过在 HTTPS 上执行第 2 步和在 HTTP 上执行第 5 步来强制解决问题。

因此,我认为这个问题与 ESI 协议与原始页面的协议不匹配有关。有没有人遇到过这个问题,或者可以帮助诊断/修复?

受信任的代理是 403 禁止错误的第一大罪魁祸首,但我已将127.0.0.1前端服务器的 IP 地址添加到我的受信任代理列表中app/config/config.yml。如果我删除受信任的代理列表,我可以确认事情会变得更糟。

4

0 回答 0