12 use Magento\PageCache\Model\Varnish\VclGeneratorFactory;
85 private $vclGeneratorFactory;
98 \
Magento\Framework\
App\Cache\StateInterface $cacheState,
100 VclGeneratorFactory $vclGeneratorFactory,
101 Json $serializer =
null 104 $this->_scopeConfig = $scopeConfig;
105 $this->_cacheState = $cacheState;
108 $this->vclGeneratorFactory = $vclGeneratorFactory;
119 return $this->_scopeConfig->getValue(self::XML_PAGECACHE_TYPE);
130 return $this->_scopeConfig->getValue(self::XML_PAGECACHE_TTL);
143 $accessList = $this->_scopeConfig->getValue(self::XML_VARNISH_PAGECACHE_ACCESS_LIST);
144 $designExceptions = $this->_scopeConfig->getValue(
145 self::XML_VARNISH_PAGECACHE_DESIGN_THEME_REGEX,
146 \
Magento\Store\Model\ScopeInterface::SCOPE_STORE
149 $version = $vclTemplatePath === self::VARNISH_5_CONFIGURATION_PATH ? 5 : 4;
150 $sslOffloadedHeader = $this->_scopeConfig->getValue(
151 \
Magento\Framework\HTTP\PhpEnvironment\Request::XML_PATH_OFFLOADER_HEADER
153 $vclGenerator = $this->vclGeneratorFactory->create([
154 'backendHost' => $this->_scopeConfig->getValue(self::XML_VARNISH_PAGECACHE_BACKEND_HOST),
155 'backendPort' => $this->_scopeConfig->getValue(self::XML_VARNISH_PAGECACHE_BACKEND_PORT),
156 'accessList' => $accessList ? explode(
',', $accessList) : [],
157 'designExceptions' => $designExceptions ? $this->serializer->unserialize($designExceptions) : [],
158 'sslOffloadedHeader' => $sslOffloadedHeader,
159 'gracePeriod' => $this->_scopeConfig->getValue(self::XML_VARNISH_PAGECACHE_GRACE_PERIOD)
161 return $vclGenerator->generateVcl(
$version);
173 '/* {{ host }} */' => $this->_scopeConfig->getValue(self::XML_VARNISH_PAGECACHE_BACKEND_HOST),
174 '/* {{ port }} */' => $this->_scopeConfig->getValue(self::XML_VARNISH_PAGECACHE_BACKEND_PORT),
180 '/* {{ ssl_offloaded_header }} */' => str_replace(
183 $this->_scopeConfig->getValue(\
Magento\Framework\HTTP\PhpEnvironment\Request::XML_PATH_OFFLOADER_HEADER)
185 '/* {{ grace_period }} */' => $this->_scopeConfig->getValue(self::XML_VARNISH_PAGECACHE_GRACE_PERIOD)
204 $accessList = $this->_scopeConfig->getValue(self::XML_VARNISH_PAGECACHE_ACCESS_LIST);
205 if (!empty($accessList)) {
207 $ips = explode(
',', $accessList);
208 foreach ($ips as $ip) {
209 $result[] = sprintf($tpl, trim($ip));
228 $tpl =
"%s (req.http.user-agent ~ \"%s\") {\n" .
" hash_data(\"%s\");\n" .
" }";
231 self::XML_VARNISH_PAGECACHE_DESIGN_THEME_REGEX,
232 \
Magento\Store\Model\ScopeInterface::SCOPE_STORE
237 if (preg_match(
'/^[\W]{1}(.*)[\W]{1}(\w+)?$/',
$rule[
'regexp'], $matches)) {
238 if (!empty($matches[2])) {
239 $pattern = sprintf(
"(?%s)%s", $matches[2], $matches[1]);
243 $if =
$i == 0 ?
'if' :
' elsif';
259 return $this->_cacheState->isEnabled(\
Magento\PageCache\Model\Cache\Type::TYPE_IDENTIFIER);
const VARNISH_5_CONFIGURATION_PATH
__construct(\Magento\Framework\Filesystem\Directory\ReadFactory $readFactory, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Framework\App\Cache\StateInterface $cacheState, \Magento\Framework\Module\Dir\Reader $reader, VclGeneratorFactory $vclGeneratorFactory, Json $serializer=null)
const VARNISH_4_CONFIGURATION_PATH
const XML_VARNISH_PAGECACHE_BACKEND_HOST
getVclFile($vclTemplatePath)
const XML_VARNISH_PAGECACHE_BACKEND_PORT
const XML_VARNISH_PAGECACHE_DESIGN_THEME_REGEX
const XML_VARNISH_PAGECACHE_ACCESS_LIST
const XML_VARNISH_PAGECACHE_GRACE_PERIOD