问题标签 [varnish]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - 通过 ESI:include 设置 Cookie,如何设置?
我试图使用 esi 在我的网站上进行 ninja 缓存。这个想法是,该网站大部分是静态的,如果用户登录与否,我只需要做一些花哨的事情。所以我试图在页面 A 上放置一个,并在页面 B 的应用程序中设置触发器。
这样我可以将页面 A 缓存在 varnish 上,让服务器处理页面 B 的小工作。
但是我在页面 B 上设置的 cookie 没有转发到页面 A 的标题并且没有工作 =/
这是我试图做的可能吗?
我可以使用 ajax,但是在将页面发送给用户之前在服务器内部执行此操作对我来说似乎更正确。
ps:我无法创建esi标签=/
http - 如果 Varnish 从主服务器获得 404,是否可以将其配置为尝试使用第二台服务器获取某些资源?
这对我来说是一个完美的解决方案,因为我需要为 Web 浏览器提供一些生成的内容。我的计划是按需生成内容并将其存储以备下次使用。我不希望浏览器每次都调用我的服务(生成内容)。如果可用,我希望他们直接转到“缓存”资源,如果不可用,则只调用该服务。因此,我将 Varinsh 放在运行服务的服务器 A 和存储先前生成的内容版本的服务器 B 前面。如果它收到对尚未缓存的资源的请求,它将尝试服务器 B。在收到 404 响应后,它将从服务器 A 请求相同的资源。
Varnish可以用VCL这样配置吗?如果没有,是否有您知道的类似解决方案?
PS 我不想将 302 重定向发送到浏览器,而且我无法控制服务器 B 以使其发送此类重定向而不是 404
drupal - 清漆页面重新加载(F5)在非缓存页面上需要很长时间
情况:Varnish 2.1.4 lenny(最新稳定版)在 Debian/Apache 上使用 mod_php 成功运行。
我在这台服务器上运行了多个 Drupal 站点,其中一些是 Varnish 增强的(例如使用 Pressflow)。这些站点按预期工作。
其他没有使用反向代理的网站,在您输入地址或点击周围时加载正常,但在您使用 F5 或 Ctrl+F5 刷新页面时需要很长时间(30-45 秒)才能加载.
我不认为这是 VCL 配置的事情;如果我为这些域之一做一个返回(通过)immeditaley,问题仍然存在。这可能与这个问题有关吗?
perl - 获取 $ENV{'QUERY_STRING'} 的奇怪问题
我在这里遇到了一个奇怪的问题。我正在将一个(工作)站点移动到一个我无法直接访问的新 apache 服务器(我必须通过两个人才能完成工作)。
该站点使用名为 adframe 的 perl 脚本来解析 html 模板。调用它的 URL 看起来就像/cgi-bin/adframe/index.html?x=something
是adframe
脚本。缺少的后缀从未引起任何实际问题。但是在这个新的 Ubuntu 服务器$ENV{'QUERY_STRING'}
上总是空的。$ENV{'REQUEST_METHOD'}
正确显示为 GET,但 query_string 什么也没显示...
常规 *.cgi 脚本显示 query_string 没有问题。
从我收集到的日志中,服务器似乎正在运行 fastcgi、mod_fcgid,并且服务器甚至不接受 .pl 作为脚本的扩展名。我对服务器软件没有太多经验,但我认为这可能是服务器不接受 adframe 作为 cgi 脚本并因此没有正确传递 query_string 的问题......谁能给我一些提示我在哪里可以指向管理员,或者我可以自己在 .htaccess 中做些什么?无论如何要确定,adframe
被识别为cgi脚本!?(如果这是问题......)
任何帮助表示赞赏!托马斯
编辑:我发现了更多详细信息:服务器似乎正在运行 VARNISH 缓存...这是与我通常的配置的主要区别...此外,脚本的工作方式是,如果您调用 /cgi-bin/adframe/somedir /somefile.html?x=something, $ENV{PATH_INFO} 告诉要解析哪个模板,而 $ENV{QUERY_STRING} 是查询字符串。现在查询字符串是空的,但是如果我调用 /cgi-bin/adframe?x=something(没有任何 PATH_INFO),查询字符串就会出现!有谁知道这里发生了什么?谢谢!
tomcat - Tomcat 的 server.xml 宿主容器和 Varnish
过去,我使用主机容器将根 uri 路由到 tomcat webapp,如下所示:
不过,我现在正在使用 Varnish,但这种方法似乎不起作用。我的 Varnish 的“default.vcl”文件中的相关代码指定此 web 应用程序的 GET 和 POST 请求直接传递到后端。虽然后端是“127.0.0.1”。这是否意味着 Tomcat 不会看到对“myapp.mydomain.com”发出的请求,而是看到对“127.0.0.1”发出的请求?
因此,对于我 server.xml 中的上述代码,似乎没有任何改变。我可以访问 myapp.mydomain.com/myapp 但 myapp.mydomain.com 仍会转到默认的 tomcat 页面。任何线索我可以做些什么来完成这项工作?
memcached - 用于加速 3 层 Web 架构的 Memcache(d) 与 Varnish
我正在尝试加快我的基准测试(3 层网络架构),并且我有一些与 Memcache(d) 和 Varnish 相关的一般性问题。
有什么区别?
在我看来,Varnish在 Web 服务器后面,缓存网页,不需要更改代码,只需要配置。
另一方面,Memcached是通用缓存系统,主要用于缓存来自数据库的结果,并且确实需要更改get
方法(第一次缓存查找)。我可以同时使用吗?前端 Web 服务器中的清漆和用于数据库缓存的 Memcached?
什么是更好的选择?
(场景 1 - 主要是写入,
场景 2 - 主要是读取,
场景 3 - 读取和写入相似)
memcached - 软件缓存基准
我正在尝试自己进行一些基准测量。这个想法是使用一些众所周知的 vanilla web 基准测试(例如 RUBiS、TPC-W)和它们的调整版本(前端 Apache 中的 Varnish 反向代理和前端数据库中的软件缓存)。我有几个困境:
Varnish 应该“相对容易”安装和配置。但是我更关心缓存。如果我理解正确,软件缓存(例如 Memcached、Redis)需要更改代码。这意味着我需要更改基准测试中的每个数据库命令(可能有大量 servlet)并使用 Memcached API。它是否正确?
其次,我很快就需要这个结果,那么有没有其他选择(一些不需要更改代码的软件缓存,或者已经包含 Memcached API 的基准测试)?
谢谢。
varnish - 清漆 ESI 认可但不包括在内
大家好。我在 Varnish 上使用 Edge Side Includes 来缓存静态 HTML shell,然后包含一些动态 HTML 和 JSON 对象。
HTML 的 ESI 已正确包含,但 JSON 对象的 ESI 未包含;调试语句确定 Varnish 可以看到它,但它莫名其妙地决定不包含 JSON ESI。
这是加载结构:
同样,esi 1和esi 3工作得很好,但esi 2没有被包括在内。esi 2的内容是这样的:
我读到看起来不像 XML 的 ESI 代码会导致错误,所以我设置了运行时参数esi_syntax=0x7。没有骰子,但至少我现在得到了一些调试数据。
对esi 2的中断调用如下所示:
对esi 3的(工作)调用如下所示:
正如我所提到的,Varnish 似乎认识到我正在尝试包含 ESI,但这是我从 varnishlog 获得的唯一相关的调试消息:
客户端看到的输出包含所有正常内容,但 <esi> 标记保持不变。它看起来就像您在上面的调试消息中看到的一样。
有谁知道为什么 esi 2 没有被解析/包含?任何帮助将不胜感激!
heroku - Heroku 是否支持 Varnish Edge Side Includes (ESI)?
任何人都知道 Heroku 的 Varnish 实现是否支持 Edge Side Includes?
更新:我最终提出了一个支持请求,向 Heroku 询问他们的 Varnish 实现。这是我的要求:
嗨,我只是想知道您的清漆实现是否支持 Edge Side Includes?是否有关于您的 varnish 实现中支持和不支持的任何信息?(例如,我在其他地方读到您不能 PURGE 条目?)
...以及他们的回应:
我们不支持 ESI。但是,我们会在每次部署时清除清漆缓存。这将确保作为代码一部分的静态资产将在任何部署时被清除,以便缓存将拾取任何新的或更改的资产。
希望这可以帮助。
-克里斯
当然,通过 PURGE,我的意思是手动清除路由,这是不支持的。
ruby-on-rails - 欺骗 Rails 应用程序以为它在不同的端口上
我有一个在端口上运行的 Rails 应用程序,8080
我需要欺骗它认为它在端口 80 上运行。
我在 port 上运行 Varnish80
并将请求转发到 port 上的 nginx 8080
,但是当用户尝试使用 OmniAuth 登录并且 Devise gem 生成一个 url 以重定向回服务器时,它认为它在端口 8080 上,然后用户将看到。
有什么办法可以欺骗 Rails 应用程序将端口硬编码为 80(我认为这是一个不好的做法),或者让 nginx 转发请求,就好像它在端口 80 上运行一样?
由于我没有为 Rails 应用程序运行 nginx 代理,所以我想不出一种方法来欺骗端口。
以前有没有人遇到过这个问题,如果是这样,需要什么样的配置来解决它?
提前致谢!
编辑: nginx 和 Varnish 都在同一台服务器上运行。