我有一个使用 CloudFront 来加速资产交付的 Rails 应用程序,一切都很好,很顺利,在 production.rb 下添加了这个。
config.action_controller.asset_host = "http://cdn.mydomain.com/"
但是,受限网络上的一堆客户端使用通过 Varnish 缓存来访问我的应用程序,并且无法解析 CDN 域。Varnish 添加了以下标头:
request.env["HTTP_X_VARNISH"]
我想做的基本上是仅在未设置此标头时使用 CDN(客户端不通过清漆)。
所以基本上是这样的
config.action_controller.asset_host = "http://cdn.mydomain.com/" unless request.env["HTTP_X_VARNISH"]
如何做到这一点?
蒂亚
asset_host
可以是Proc
。
config.action_controller.asset_host = ->(source, request) do
if request.env["HTTP_X_VARNISH"]
"#{request.protocol}#{request.host_with_port}"
else
"http://cdn.mydomain.com/"
end
end