如何使用清漆来加快我的网站
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.8,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
如何使用清漆来加快我的网站
因为Symfonob娱乐下载y的缓存使用标准的HTTP缓存头,所以HTTP缓存可以很容易地替换为任何其他反向代理。清漆是一个强大的,开源的,HTTP加速器能够快速服务缓存内容,包括支持边边包含.
使Symfob娱乐下载ony信任反向代理
清漆自动转发IP为X-Forwarded-For
并留下X-Forwarded-Proto
请求中的头。如果您没有将Varnish配置为受信任的代理,Symfony会将所有请求视为来自Varnish主机的ob娱乐下载不安全HTTP连接,而不是真正的客户端。
记住配置framework.trusted_proxies在Symfonob娱乐下载y配置中,以便Varnish被视为受信任的代理X-Forwarded使用头文件。
Varnish,在它的默认配置下,发送X-Forwarded-For
标题,但不会过滤掉转发
头。如果您可以访问Varnish配置文件,则可以配置Varnish以删除转发
标题:
1 2 3
sub vcl_recv {unset req.http.Forwarded;}
如果您无法访问Varnish配置,则可以将Symfony配置为不信任ob娱乐下载转发
标题,详情见如何配置Symfony在负载均衡器ob娱乐下载或反向代理后工作.
路由和X-FORWARDED报头
为了确保Symfony路由器使用Varob娱乐下载nish正确地生成url,一个X-Forwarded-Port
头必须存在,Symfony才能使用正确的端口号。ob娱乐下载
此端口号对应于您的安装程序用于接收外部连接的端口(80
是HTTP连接的默认值)。如果应用程序也接受HTTPS连接,那么在默认HTTPS端口443上可能有另一个代理(因为Varnish本身不做HTTPS),该代理处理SSL终止,并将请求作为HTTP请求转发给VarnishX-Forwarded-Proto
头。此时需要添加如下配置片段:
1 2 3 4 5 6 7
Sub vcl_recv {如果(req.http。X-Forwarded-Proto = =“https”){集req.http。X-Forwarded-Port =“443”;}其他的{集req.http。X-Forwarded-Port =“80”;}}
Cookies和缓存
默认情况下,正常的缓存代理在发送请求时不缓存任何东西cookie或基本身份验证头.这是因为页面的内容应该依赖于cookie值或身份验证头。
如果您确定后端从不使用会话或基本身份验证,请让Varnish从请求中删除相应的头,以防止客户端绕过缓存。在实践中,你至少在站点的某些部分需要会话,例如,当使用表单时CSRF保护.在这种情况下,一定要做到只有在实际需要时才启动会话并在不再需要时清除会话。或者,你可以调查缓存包含CSRF保护表单的页面.
用JavaScript创建且仅在前端使用的cookie,例如当使用谷歌Analytics时,仍然会被发送到服务器。这些cookie与后端无关,不应该影响缓存决策。配置你的清漆缓存为清理cookie报头.您希望保留会话cookie(如果有的话),并删除所有其他cookie,以便在没有活动会话时缓存页面。除非您更改了PHP的默认配置,否则会话cookie具有此名称PHPSESSID
:
- 清漆4
- 清漆3
12 3 4 5 6 7 8 9 10 11 12 13 14 15
Sub vcl_recv {//删除除会话ID外的所有cookie。如果(req.http.Cookie) {集req.http.Cookie =”;"+ req.http.Cookie;集req.http.Cookie = regsuball(req.http.Cookie,”;+”,”;");集req.http.Cookie = regsuball(req.http.Cookie,”;(PHPSESSID) = ",”;1 = " \);集req.http.Cookie = regsuball(req.http.Cookie,";[^ ][^;]*","");集req.http.Cookie = regsuball(req.http.Cookie,“^;) + | (;+ $”,"");如果(req.http。饼干= =""){//如果没有cookie,删除页眉以缓存页面。设置req.http.Cookie;}}}
12 3 4 5 6 7 8 9 10 11 12 13 14 15
Sub vcl_recv {//删除除会话ID外的所有cookie。如果(req.http.Cookie) {集req.http.Cookie =”;"+ req.http.Cookie;集req.http.Cookie = regsuball(req.http.Cookie,”;+”,”;");集req.http.Cookie = regsuball(req.http.Cookie,”;(PHPSESSID) = ",”;1 = " \);集req.http.Cookie = regsuball(req.http.Cookie,";[^ ][^;]*","");集req.http.Cookie = regsuball(req.http.Cookie,“^;) + | (;+ $”,"");如果(req.http。饼干= =""){//如果没有cookie,删除页眉以缓存页面。删除req.http.Cookie;}}}
提示
如果内容对每个用户都不不同,而是取决于用户的角色,则解决方案是为每个组分离缓存。类实现并解释了此模式FOSHttpCacheBundle用……的名字用户上下文.
确保一致的缓存行为
Varnish使用应用程序发送的缓存头来确定如何缓存内容。然而,Varnish 4之前的版本并不尊重cache - control: no - cache
,不是商店
而且私人
.为了确保一致的行为,如果您仍在使用Varnish 3,请使用以下配置:
- 清漆3
1 2 3 4 5 6 7 8 9 10 11
subvcl_fetch {/*默认情况下,Varnish3忽略Cache-Control: no-cache和private https://www.varnish-cache.org/docs/3.0/tutorial/increasing_your_hitrate.html#cache-control */如果(beresp.http。cache - control ~“私人”| | beresp.http。cache - control ~“no - cache”| | beresp.http。cache - control ~“不是商店”){返回(hit_for_pass);}}
提示
你可以在VCL文件中看到Varnish的默认行为:default.vcl对于清漆3,builtin.vcl4.清漆。
启用边缘包含(ESI)
如在包含文章, ob娱乐下载Symfony检测它是否与一个理解ESI的反向代理通信。当使用Symfony反向代理时,您ob娱乐下载不需要做任何事情。但是要使Varnish而不是Symfony解析ESI标记,您需ob娱乐下载要在Varnish中进行一些配置。ob娱乐下载Symfony使用Surrogate-Capability
标头的边缘结构Akamai描述。
请注意
清漆只支持src
ESI标签属性(onerror
而且alt
属性被忽略)。
首先,配置Varnish,使其通过添加Surrogate-Capability
转发到后端应用程序的请求头:
1 2 3 4
Sub vcl_recv {//添加一个代理能力报头来宣布ESI支持。集req.http。Surrogate-Capability =“abc = ESI / 1.0”;}
请注意
的美国广播公司
除非您有多个“代理”需要宣传其功能,否则部分标题并不重要。看到Surrogate-Capability头获取详细信息。
然后,优化Varnish,使其仅在至少有一个ESI标记时解析响应内容Surrogate-Control
Symfony自动添加的ob娱乐下载头文件:
- 清漆4
- 清漆3
1 2 3 4 5 6 7
Sub vcl_backend_response {//检查ESI确认并删除代理控制头如果(beresp.http。Surrogate-Control ~“ESI / 1.0”){取消设置beresp.http. proxy - control;集beresp。do_esi =真正的;}}
1 2 3 4 5 6 7
subvcl_fetch {//检查ESI确认并删除代理控制头如果(beresp.http。Surrogate-Control ~“ESI / 1.0”){取消设置beresp.http. proxy - control;集beresp。do_esi =真正的;}}
提示
如果您遵循了关于确保一致的缓存行为的建议,那么这些VCL函数已经存在。只需将代码附加到函数的末尾,它们不会相互干扰。
缓存失效
如果希望缓存频繁更改的内容,并且仍然向用户提供最新版本,则需要使该内容无效。而缓存失效允许您在代理过期之前清除内容,这增加了缓存设置的复杂性。
提示
开源FOSHttpCacheBundle通过帮助您组织缓存和无效设置,消除缓存无效的痛苦。
的文件欧宝官网下载appFOSHttpCacheBundle解释如何为缓存失效配置Varnish和其他反向代理。