nginx - 全页缓存(FastCGI)+ CSRF 令牌(服务器端加载 SSI、ESI、Ajax)+ Nginx
问题描述
首先:我已经阅读了很多SO帖子,并没有找到令人满意的答案。我希望我没有错过答案。
情况:
- 我正在运行一个 Laravel 应用程序(PHP 7.3)
- 我使用 FastCGI (php-fpm) 和 Nginx 实现了一个完整的页面缓存
- 它工作得很好,但是像 csrf 令牌这样的动态东西没有刷新
- 我的目标:获取完整的缓存页面,但使用正确的 CSRF 令牌进行用户会话
我试过的:
- 我深入研究了Nginx SSI,但只能使其与 .html 文件一起使用。在这里,我想包含一个简单的 .php 文件(包括 laravel Core)来检索
csrf_token()
- 我尝试使用
file
并virtual
包含.php
文件和 API 路由。它从来没有在我的 Blade 模板中工作过。(据我了解很奇怪,它基于响应内容类型,如 text/html)。即使是基本的<!--#echo var="DATE_LOCAL" -->
也不起作用,并且被 Nginx 剥离(没有响应)。 .html
文件中的相同测试有效。我可以包含具有我的令牌的 .php 文件
- 我尝试使用
- 我查看了 ESI(边缘侧加载),但似乎还不支持 Nginx……太糟糕了。
- 似乎可以使用 Varnish 作为代理来使 ESI 工作。但我们的基础设施发生了很多变化。
我剩下的:
- 最后,我能想到的唯一解决方案是发出 Ajax API 请求 onLoad 以获取令牌。在每个页面加载。这似乎不是一个很好的方法,但是,我没有选择(是吗?)。
- 也许我可以欺骗 Nginx 认为我的根 index.php 是 HTML 并让 SSI 工作?(灵感)
- SSI/ESI 似乎正是我所需要的。但这似乎也是一种“古老”的技术。尽管如此,我还是找不到真正的替代品。
问题:
- SSI 是否仅适用于 HTML 文件?
- 为 ESI 安装一切值得吗?
- Ajax 是我唯一的解决方案吗?
- 还有什么我可能错过的吗?
非常感谢。我知道有类似的问题,但我找不到这种情况的明确答案。
解决方案
推荐阅读
- javascript - 仅对嵌套对象的“数字”值求和的问题
- excel - 如何根据单元格值将行的内容从一个表移动到另一个表?
- html - 使用模板变量时,Django 模板不呈现 CSS
- mobile - 更改为桌面站点模式
- r - 从 R 中的现有列在空间数据框中创建一个新列
- javascript - Javascript不一致的舍入
- java - org.mockito.exceptions.misusing.InvalidUseOfMatchersException:预期 2 个匹配器,记录 1 个:
- python - 如何避免向相反方向移动
- flutter - 使用 Obx,得到这个错误:[Get] 检测到 GetX 使用不当
- multithreading - 在 Rust 中的独立线程之间发送消息