Привет, у меня есть следующий вопрос. У меня есть веб-сайт под управлением laravel 5.1, чтобы сделать его доступным для многих пользователей и ускорить загрузку, я использовал Varnish4. Мой лак vlc файл выглядит следующим образом.
backend default {
.host = "127.0.0.1";
.port = "80";
}
sub vcl_recv {
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing cookies you don't need,
# rewriting the request, etc.
unset req.http.Cookie;
}
sub vcl_backend_response {
unset beresp.http.Set-Cookie;
set beresp.do_esi = true;
set beresp.ttl = 1m;
return(deliver);
}
Как вы можете видеть, я включаю esi processign для всех запросов (не лучшая практика, но я пытаюсь заставить все работать) и удаляю все куки в подпрограмме vcl_recv.
Теперь у меня есть шаблон лезвия с блоком esi: include следующим образом:
<esi:remove>
NO ESI SUPPORT
<script>window.load_hot = true;</script>
</esi:remove>
<!--esi
<p>The full text of the license:
<esi:include src="http://localhost/date.php" />
</p>
-->
Маршрут в теге esi include работает нормально и возвращает ожидаемый результат.
Система Varnish анализирует блок ESI, как и ожидалось, поскольку резервное сообщение (show NO ESI SUPPORT) не отображается.
Итак, что может быть плохого в этом коде?
Тег esi: include принимает только путь, а не полный URL с протоколом, именем хоста и т. Д., Например,
<esi:include src="/cgi-bin/date.cgi"/>
Увидеть: https://www.varnish-cache.org/docs/4.1/users-guide/esi.html
Решаемые.
По какой-то причине это:
<esi:remove>
NO ESI SUPPORT
<script>window.load_hot = true;</script>
</esi:remove>
<!--esi
<p>The full text of the license:
<esi:include src="http://localhost/date.php" />
</p>
-->
не работал из-за тега.
После удаления тега вот так:
<esi:remove>
NO ESI SUPPORT
<script>window.load_hot = true;</script>
</esi:remove>
<p>The full text of the license:
<esi:include src="http://localhost/date.php" />
</p>
Включение esi начало работать, как и ожидалось.