一个 Symfony 2.3 应用程序在一个带有 nginx 端口 80 的 Web 服务器上。Varnish4 在一个端口 80 上的前端服务器上运行,Nginx 在端口 443 上作为 SSL 终结器。这也使用 Varnish3 进行了测试,结果相同。大多数情况下,这非常有效!
几分钟后,一些 ESI 使用完整的 Symfony 模板返回 403 Forbidden 错误。我相信当缓存的片段过期时会发生这种情况。
我可以通过以下方式强制解决问题:
- 重启 Varnish 清除缓存
- 通过 HTTP 加载页面(一切正常)
- 通过 HTTPS 加载页面(一切正常)
- 等待某些 ESI 从缓存中过期
- 通过 HTTPS 加载页面(此处发生错误)
- 通过 HTTP 加载页面(一切正常)
我也可以通过在 HTTPS 上执行第 2 步和在 HTTP 上执行第 5 步来强制解决问题。
因此,我认为这个问题与 ESI 协议与原始页面的协议不匹配有关。有没有人遇到过这个问题,或者可以帮助诊断/修复?
受信任的代理是 403 禁止错误的第一大罪魁祸首,但我已将127.0.0.1
前端服务器的 IP 地址添加到我的受信任代理列表中app/config/config.yml
。如果我删除受信任的代理列表,我可以确认事情会变得更糟。