Nexcessnet_Turpentine - Version 0.6.7

Version Notes

Supports Magento v1.6 and later

Download this release

Release Info

Developer Chris Wells
Extension Nexcessnet_Turpentine
Version 0.6.7
Comparing to
See all releases


Code changes from version 0.6.6 to 0.6.7

app/code/community/Nexcessnet/Turpentine/Model/Observer/Esi.php CHANGED
@@ -230,6 +230,11 @@ class Nexcessnet_Turpentine_Model_Observer_Esi extends Varien_Event_Observer {
230
  if( $esiHelper->shouldResponseUseEsi() &&
231
  $blockObject instanceof Mage_Core_Block_Template &&
232
  $esiOptions = $blockObject->getEsiOptions() ) {
 
 
 
 
 
233
  if( Mage::app()->getStore()->getCode() == 'admin' ) {
234
  // admin blocks are not allowed to be cached for now
235
  $debugHelper->logWarn(
@@ -320,8 +325,6 @@ class Nexcessnet_Turpentine_Model_Observer_Esi extends Varien_Event_Observer {
320
  $methodParam = $esiHelper->getEsiMethodParam();
321
  $esiData = new Varien_Object();
322
  $esiData->setStoreId( Mage::app()->getStore()->getId() );
323
- $esiData->setDesignPackage( Mage::getDesign()->getPackageName() );
324
- $esiData->setDesignTheme( Mage::getDesign()->getTheme( 'layout' ) );
325
  $esiData->setNameInLayout( $blockObject->getNameInLayout() );
326
  $esiData->setBlockType( get_class( $blockObject ) );
327
  $esiData->setLayoutHandles( $this->_getBlockLayoutHandles( $blockObject ) );
@@ -413,9 +416,9 @@ class Nexcessnet_Turpentine_Model_Observer_Esi extends Varien_Event_Observer {
413
  // check if this handle has any block or reference tags that
414
  // refer to this block or a child block, unless the handle name
415
  // is blank
416
- if( $handle !== '' &&
417
  $layoutXml->xpath( sprintf(
418
- '//%s//*[@name=\'%s\']', $handle, $blockName ) ) ) {
419
  $activeHandles[] = $handle;
420
  }
421
  }
230
  if( $esiHelper->shouldResponseUseEsi() &&
231
  $blockObject instanceof Mage_Core_Block_Template &&
232
  $esiOptions = $blockObject->getEsiOptions() ) {
233
+
234
+ if ((isset($esiOptions['disableEsiInjection'])) && ($esiOptions['disableEsiInjection'] == 1)) {
235
+ return;
236
+ }
237
+
238
  if( Mage::app()->getStore()->getCode() == 'admin' ) {
239
  // admin blocks are not allowed to be cached for now
240
  $debugHelper->logWarn(
325
  $methodParam = $esiHelper->getEsiMethodParam();
326
  $esiData = new Varien_Object();
327
  $esiData->setStoreId( Mage::app()->getStore()->getId() );
 
 
328
  $esiData->setNameInLayout( $blockObject->getNameInLayout() );
329
  $esiData->setBlockType( get_class( $blockObject ) );
330
  $esiData->setLayoutHandles( $this->_getBlockLayoutHandles( $blockObject ) );
416
  // check if this handle has any block or reference tags that
417
  // refer to this block or a child block, unless the handle name
418
  // is blank
419
+ if( $handle !== '' && ( strpos($handle, 'THEME') === 0 ||
420
  $layoutXml->xpath( sprintf(
421
+ '//%s//*[@name=\'%s\']', $handle, $blockName ) ) ) ) {
422
  $activeHandles[] = $handle;
423
  }
424
  }
app/code/community/Nexcessnet/Turpentine/Model/Varnish/Admin/Socket.php CHANGED
@@ -359,7 +359,13 @@ class Nexcessnet_Turpentine_Model_Varnish_Admin_Socket {
359
  Mage::throwException('Varnish versions before 2.1 are not supported');
360
  }
361
  if ( count($bannerText)<7 ) {
362
- // Varnish before 3.0 does not spit out a version number
 
 
 
 
 
 
363
  return '2.1';
364
  } elseif ( preg_match(self::REGEXP_VARNISH_VERSION, $bannerText[4], $matches)===1 ) {
365
  return $matches['vmajor'] . '.' . $matches['vminor'];
359
  Mage::throwException('Varnish versions before 2.1 are not supported');
360
  }
361
  if ( count($bannerText)<7 ) {
362
+ // Varnish before 3.0.4 does not spit out a version number
363
+ $resp = $this->_write( 'help' )->_read();
364
+ if( strpos( $resp['text'], 'ban.url' ) !== false ) {
365
+ // Varnish versions 3.0 through 3.0.3 do not return a version banner.
366
+ // To differentiate between 2.1 and 3.0, we check the existence of the ban.url command.
367
+ return '3.0';
368
+ }
369
  return '2.1';
370
  } elseif ( preg_match(self::REGEXP_VARNISH_VERSION, $bannerText[4], $matches)===1 ) {
371
  return $matches['vmajor'] . '.' . $matches['vminor'];
app/code/community/Nexcessnet/Turpentine/Model/Varnish/Configurator/Abstract.php CHANGED
@@ -379,6 +379,14 @@ EOS;
379
  return implode( '|', $ignoredParameters);
380
  }
381
 
 
 
 
 
 
 
 
 
382
  /**
383
  * Get the Generate Session
384
  *
@@ -406,8 +414,8 @@ EOS;
406
  * @return string
407
  */
408
  protected function _getGenerateSession() {
409
- return Mage::getStoreConfig( 'turpentine_varnish/general/vcl_fix' )
410
- ? '# call generate_session' : 'call generate_session;';
411
  }
412
 
413
 
@@ -825,6 +833,92 @@ EOS;
825
  'turpentine_vcl/normalization/cookie_regex' ) );
826
  }
827
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
828
  /**
829
  * Build the list of template variables to apply to the VCL template
830
  *
@@ -844,6 +938,7 @@ EOS;
844
  'default_ttl' => $this->_getDefaultTtl(),
845
  'enable_get_excludes' => ($this->_getGetParamExcludes() ? 'true' : 'false'),
846
  'enable_get_ignored' => ($this->_getIgnoreGetParameters() ? 'true' : 'false'),
 
847
  'debug_headers' => $this->_getEnableDebugHeaders(),
848
  'grace_period' => $this->_getGracePeriod(),
849
  'force_cache_static' => $this->_getForceCacheStatic(),
@@ -894,6 +989,13 @@ EOS;
894
  $vars['normalize_cookie_target'] = $this->_getNormalizeCookieTarget();
895
  }
896
 
 
 
 
 
 
 
 
897
  $customIncludeFile = $this->_getCustomIncludeFilename();
898
  if( is_readable( $customIncludeFile ) ) {
899
  $vars['custom_vcl_include'] = file_get_contents( $customIncludeFile );
379
  return implode( '|', $ignoredParameters);
380
  }
381
 
382
+ /**
383
+ * @return boolean
384
+ */
385
+ protected function _sendUnModifiedUrlToBackend()
386
+ {
387
+ return Mage::getStoreConfigFlag('turpentine_vcl/params/transfer_unmodified_url');
388
+ }
389
+
390
  /**
391
  * Get the Generate Session
392
  *
414
  * @return string
415
  */
416
  protected function _getGenerateSession() {
417
+ return Mage::getStoreConfigFlag( 'turpentine_varnish/general/vcl_fix' )
418
+ ? 'return (pipe);' : 'call generate_session;';
419
  }
420
 
421
 
833
  'turpentine_vcl/normalization/cookie_regex' ) );
834
  }
835
 
836
+ /**
837
+ * Get the allowed IPs when in maintenance mode
838
+ *
839
+ * @return string
840
+ */
841
+ protected function _vcl_sub_maintenance_allowed_ips() {
842
+ if((! $this->_getDebugIps()) || ! Mage::getStoreConfig( 'turpentine_vcl/maintenance/custom_vcl_synth' ) ) {
843
+ return false;
844
+ }
845
+
846
+ switch(Mage::getStoreConfig( 'turpentine_varnish/servers/version' )) {
847
+ case 4.0:
848
+ $tpl = <<<EOS
849
+ if (req.http.X-Forwarded-For) {
850
+ if (req.http.X-Forwarded-For !~ "{{debug_ips}}") {
851
+ return (synth(999, "Maintenance mode"));
852
+ }
853
+ }
854
+ else {
855
+ if (client.ip !~ debug_acl) {
856
+ return (synth(999, "Maintenance mode"));
857
+ }
858
+ }
859
+
860
+ EOS;
861
+ break;
862
+ default:
863
+ $tpl = <<<EOS
864
+ if (req.http.X-Forwarded-For) {
865
+ if(req.http.X-Forwarded-For !~ "{{debug_ips}}") {
866
+ error 503;
867
+ }
868
+ } else {
869
+ if (client.ip !~ debug_acl) {
870
+ error 503;
871
+ }
872
+ }
873
+ EOS;
874
+ }
875
+
876
+ return $this->_formatTemplate( $tpl, array(
877
+ 'debug_ips' => Mage::getStoreConfig( 'dev/restrict/allow_ips' ) ) );
878
+ }
879
+
880
+ /**
881
+ * Get the allowed IPs when in maintenance mode
882
+ *
883
+ * @return string
884
+ */
885
+ protected function _vcl_sub_synth()
886
+ {
887
+ if ((!$this->_getDebugIps()) || !Mage::getStoreConfig('turpentine_vcl/maintenance/custom_vcl_synth')) {
888
+ return false;
889
+ }
890
+
891
+ switch (Mage::getStoreConfig('turpentine_varnish/servers/version')) {
892
+ case 4.0:
893
+ $tpl = <<<EOS
894
+ sub vcl_synth {
895
+ if (resp.status == 999) {
896
+ set resp.status = 404;
897
+ set resp.http.Content-Type = "text/html; charset=utf-8";
898
+ synthetic({"{{vcl_synth_content}}"});
899
+ return (deliver);
900
+ }
901
+ return (deliver);
902
+ }
903
+
904
+ EOS;
905
+ break;
906
+ default:
907
+ $tpl = <<<EOS
908
+ sub vcl_error {
909
+ set obj.http.Content-Type = "text/html; charset=utf-8";
910
+ synthetic {"{{vcl_synth_content}}"};
911
+ return (deliver);
912
+ }
913
+ EOS;
914
+ }
915
+
916
+ return $this->_formatTemplate($tpl, array(
917
+ 'vcl_synth_content' => Mage::getStoreConfig('turpentine_vcl/maintenance/custom_vcl_synth')));
918
+ }
919
+
920
+
921
+
922
  /**
923
  * Build the list of template variables to apply to the VCL template
924
  *
938
  'default_ttl' => $this->_getDefaultTtl(),
939
  'enable_get_excludes' => ($this->_getGetParamExcludes() ? 'true' : 'false'),
940
  'enable_get_ignored' => ($this->_getIgnoreGetParameters() ? 'true' : 'false'),
941
+ 'send_unmodified_url' => ($this->_sendUnModifiedUrlToBackend() ? 'true' : 'false'),
942
  'debug_headers' => $this->_getEnableDebugHeaders(),
943
  'grace_period' => $this->_getGracePeriod(),
944
  'force_cache_static' => $this->_getForceCacheStatic(),
989
  $vars['normalize_cookie_target'] = $this->_getNormalizeCookieTarget();
990
  }
991
 
992
+ if( Mage::getStoreConfig( 'turpentine_vcl/maintenance/enable' ) ) {
993
+ // in vcl_recv set the allowed IPs otherwise load the vcl_error (v3)/vcl_synth (v4)
994
+ $vars['maintenance_allowed_ips'] = $this->_vcl_sub_maintenance_allowed_ips();
995
+ // set the vcl_error from Magento database
996
+ $vars['vcl_synth'] = $this->_vcl_sub_synth();
997
+ }
998
+
999
  $customIncludeFile = $this->_getCustomIncludeFilename();
1000
  if( is_readable( $customIncludeFile ) ) {
1001
  $vars['custom_vcl_include'] = file_get_contents( $customIncludeFile );
app/code/community/Nexcessnet/Turpentine/controllers/EsiController.php CHANGED
@@ -183,9 +183,6 @@ class Nexcessnet_Turpentine_EsiController extends Mage_Core_Controller_Front_Act
183
  }
184
  }
185
  $layout = Mage::getSingleton( 'core/layout' );
186
- Mage::getSingleton( 'core/design_package' )
187
- ->setPackageName( $esiData->getDesignPackage() )
188
- ->setTheme( $esiData->getDesignTheme() );
189
 
190
  // dispatch event for adding handles to layout update
191
  Mage::dispatchEvent(
183
  }
184
  }
185
  $layout = Mage::getSingleton( 'core/layout' );
 
 
 
186
 
187
  // dispatch event for adding handles to layout update
188
  Mage::dispatchEvent(
app/code/community/Nexcessnet/Turpentine/etc/config.xml CHANGED
@@ -20,7 +20,7 @@
20
  <config>
21
  <modules>
22
  <Nexcessnet_Turpentine>
23
- <version>0.6.6</version>
24
  </Nexcessnet_Turpentine>
25
  </modules>
26
  <default>
@@ -80,6 +80,7 @@
80
  <params>
81
  <get_params>__SID,XDEBUG_PROFILE</get_params>
82
  <ignore_get_params>utm_source,utm_medium,utm_campaign,utm_content,utm_term,gclid,cx,ie,cof,siteurl</ignore_get_params>
 
83
  </params>
84
  <static>
85
  <force_static>1</force_static>
20
  <config>
21
  <modules>
22
  <Nexcessnet_Turpentine>
23
+ <version>0.6.7</version>
24
  </Nexcessnet_Turpentine>
25
  </modules>
26
  <default>
80
  <params>
81
  <get_params>__SID,XDEBUG_PROFILE</get_params>
82
  <ignore_get_params>utm_source,utm_medium,utm_campaign,utm_content,utm_term,gclid,cx,ie,cof,siteurl</ignore_get_params>
83
+ <transfer_unmodified_url>0</transfer_unmodified_url>
84
  </params>
85
  <static>
86
  <force_static>1</force_static>
app/code/community/Nexcessnet/Turpentine/etc/config.xml~ CHANGED
@@ -20,7 +20,7 @@
20
  <config>
21
  <modules>
22
  <Nexcessnet_Turpentine>
23
- <version>0.6.5</version>
24
  </Nexcessnet_Turpentine>
25
  </modules>
26
  <default>
@@ -80,6 +80,7 @@
80
  <params>
81
  <get_params>__SID,XDEBUG_PROFILE</get_params>
82
  <ignore_get_params>utm_source,utm_medium,utm_campaign,utm_content,utm_term,gclid,cx,ie,cof,siteurl</ignore_get_params>
 
83
  </params>
84
  <static>
85
  <force_static>1</force_static>
20
  <config>
21
  <modules>
22
  <Nexcessnet_Turpentine>
23
+ <version>0.6.6</version>
24
  </Nexcessnet_Turpentine>
25
  </modules>
26
  <default>
80
  <params>
81
  <get_params>__SID,XDEBUG_PROFILE</get_params>
82
  <ignore_get_params>utm_source,utm_medium,utm_campaign,utm_content,utm_term,gclid,cx,ie,cof,siteurl</ignore_get_params>
83
+ <transfer_unmodified_url>0</transfer_unmodified_url>
84
  </params>
85
  <static>
86
  <force_static>1</force_static>
app/code/community/Nexcessnet/Turpentine/etc/system.xml CHANGED
@@ -541,6 +541,20 @@
541
  <show_in_website>0</show_in_website>
542
  <show_in_store>0</show_in_store>
543
  </ignore_get_params>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
544
  </fields>
545
  </params>
546
  <static translate="label" module="turpentine">
@@ -575,6 +589,35 @@
575
  </exts>
576
  </fields>
577
  </static>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
578
  </groups>
579
  </turpentine_vcl>
580
  </sections>
541
  <show_in_website>0</show_in_website>
542
  <show_in_store>0</show_in_store>
543
  </ignore_get_params>
544
+ <transfer_unmodified_url translate="label" module="turpentine">
545
+ <label>Transfer unmodified URL to Backend Server</label>
546
+ <comment>
547
+ By default the backend server (webserver / magento) gets a modified URL (without ignored get parameters).
548
+ As a result the ignored parameters can not be used by the backend server for uncachable requests, for example a redirect.
549
+ By activating this option the backend server gets the the unmodified url, but the cache still uses the modified url for lookups.
550
+ </comment>
551
+ <frontend_type>select</frontend_type>
552
+ <source_model>adminhtml/system_config_source_yesno</source_model>
553
+ <sort_order>21</sort_order>
554
+ <show_in_default>1</show_in_default>
555
+ <show_in_website>0</show_in_website>
556
+ <show_in_store>0</show_in_store>
557
+ </transfer_unmodified_url>
558
  </fields>
559
  </params>
560
  <static translate="label" module="turpentine">
589
  </exts>
590
  </fields>
591
  </static>
592
+ <maintenance translate="label" module="turpentine">
593
+ <label>Maintenance mode</label>
594
+ <frontend_type>text</frontend_type>
595
+ <sort_order>46</sort_order>
596
+ <show_in_default>1</show_in_default>
597
+ <show_in_website>0</show_in_website>
598
+ <show_in_store>0</show_in_store>
599
+ <fields>
600
+ <enable translate="label" module="turpentine">
601
+ <label>Enable Maintenance Mode</label>
602
+ <frontend_type>select</frontend_type>
603
+ <source_model>turpentine/config_select_toggle</source_model>
604
+ <comment>If enabled IP's not in 'developer client restrictions' will receive the following error page</comment>
605
+ <sort_order>10</sort_order>
606
+ <show_in_default>1</show_in_default>
607
+ <show_in_website>0</show_in_website>
608
+ <show_in_store>0</show_in_store>
609
+ </enable>
610
+ <custom_vcl_synth translate="label" module="turpentine">
611
+ <label>Custom HTML content of vcl synth (error) sub</label>
612
+ <frontend_type>textarea</frontend_type>
613
+ <comment>Enter full HTML page content</comment>
614
+ <sort_order>20</sort_order>
615
+ <show_in_default>1</show_in_default>
616
+ <show_in_website>0</show_in_website>
617
+ <show_in_store>0</show_in_store>
618
+ </custom_vcl_synth>
619
+ </fields>
620
+ </maintenance>
621
  </groups>
622
  </turpentine_vcl>
623
  </sections>
app/code/community/Nexcessnet/Turpentine/misc/version-2.vcl CHANGED
@@ -104,6 +104,13 @@ sub vcl_recv {
104
  set req.http.X-Opt-Enable-Caching = "{{enable_caching}}";
105
  set req.http.X-Opt-Force-Static-Caching = "{{force_cache_static}}";
106
  set req.http.X-Opt-Enable-Get-Excludes = "{{enable_get_excludes}}";
 
 
 
 
 
 
 
107
 
108
  # Normalize request data before potentially sending things off to the
109
  # backend. This ensures all request types get the same information, most
@@ -200,7 +207,14 @@ sub vcl_recv {
200
  set req.url = regsuball(req.url, "(?:(\?)?|&)(?:{{get_param_ignored}})=[^&]+", "\1");
201
  set req.url = regsuball(req.url, "(?:(\?)&|\?$)", "\1");
202
  }
203
-
 
 
 
 
 
 
 
204
 
205
  return (lookup);
206
  }
@@ -220,6 +234,13 @@ sub vcl_pipe {
220
  # }
221
 
222
  sub vcl_hash {
 
 
 
 
 
 
 
223
  set req.hash += req.url;
224
  if (req.http.Host) {
225
  set req.hash += req.http.Host;
104
  set req.http.X-Opt-Enable-Caching = "{{enable_caching}}";
105
  set req.http.X-Opt-Force-Static-Caching = "{{force_cache_static}}";
106
  set req.http.X-Opt-Enable-Get-Excludes = "{{enable_get_excludes}}";
107
+ set req.http.X-Opt-Send-Unmodified-Url = "{{send_unmodified_url}}";
108
+
109
+
110
+ if(req.http.X-Opt-Send-Unmodified-Url == "true") {
111
+ # save unmodified url
112
+ set req.http.X-Varnish-Origin-Url = req.url;
113
+ }
114
 
115
  # Normalize request data before potentially sending things off to the
116
  # backend. This ensures all request types get the same information, most
207
  set req.url = regsuball(req.url, "(?:(\?)?|&)(?:{{get_param_ignored}})=[^&]+", "\1");
208
  set req.url = regsuball(req.url, "(?:(\?)&|\?$)", "\1");
209
  }
210
+
211
+
212
+ if(req.http.X-Opt-Send-Unmodified-Url == "true") {
213
+ # change req.url back and save the modified for cache look-ups in a separate variable
214
+ set req.http.X-Varnish-Cache-Url = req.url;
215
+ set req.url = req.http.X-Varnish-Origin-Url;
216
+ unset req.http.X-Varnish-Origin-Url;
217
+ }
218
 
219
  return (lookup);
220
  }
234
  # }
235
 
236
  sub vcl_hash {
237
+
238
+ if({{send_unmodified_url}} && req.http.X-Varnish-Cache-Url) {
239
+ set req.hash += req.http.X-Varnish-Cache-Url;
240
+ } else {
241
+ set req.hash += req.url;
242
+ }
243
+
244
  set req.hash += req.url;
245
  if (req.http.Host) {
246
  set req.hash += req.http.Host;
app/code/community/Nexcessnet/Turpentine/misc/version-3.vcl CHANGED
@@ -97,6 +97,8 @@ sub generate_session_expires {
97
  ## Varnish Subroutines
98
 
99
  sub vcl_recv {
 
 
100
  # this always needs to be done so it's up at the top
101
  if (req.restarts == 0) {
102
  if (req.http.X-Forwarded-For) {
@@ -107,6 +109,11 @@ sub vcl_recv {
107
  }
108
  }
109
 
 
 
 
 
 
110
  # Normalize request data before potentially sending things off to the
111
  # backend. This ensures all request types get the same information, most
112
  # notably POST requests getting a normalized user agent string to empower
@@ -170,8 +177,7 @@ sub vcl_recv {
170
  set req.http.Cookie = "frontend=crawler-session";
171
  } else {
172
  # it's a real user, make up a new session for them
173
- {{generate_session}}# call generate_session;
174
- return (pipe);
175
  }
176
  }
177
  if ({{force_cache_static}} &&
@@ -202,6 +208,11 @@ sub vcl_recv {
202
  set req.url = regsuball(req.url, "(?:(\?)&|\?$)", "\1");
203
  }
204
 
 
 
 
 
 
205
 
206
  # everything else checks out, try and pull from the cache
207
  return (lookup);
@@ -222,7 +233,12 @@ sub vcl_pipe {
222
  # }
223
 
224
  sub vcl_hash {
225
- hash_data(req.url);
 
 
 
 
 
226
  if (req.http.Host) {
227
  hash_data(req.http.Host);
228
  } else {
@@ -350,6 +366,8 @@ sub vcl_fetch {
350
  # else it's not part of Magento so use the default Varnish handling
351
  }
352
 
 
 
353
  sub vcl_deliver {
354
  if (req.http.X-Varnish-Faked-Session) {
355
  # need to set the set-cookie header since we just made it out of thin air
97
  ## Varnish Subroutines
98
 
99
  sub vcl_recv {
100
+ {{maintenance_allowed_ips}}
101
+
102
  # this always needs to be done so it's up at the top
103
  if (req.restarts == 0) {
104
  if (req.http.X-Forwarded-For) {
109
  }
110
  }
111
 
112
+ if({{send_unmodified_url}}) {
113
+ # save the unmodified url
114
+ set req.http.X-Varnish-Origin-Url = req.url;
115
+ }
116
+
117
  # Normalize request data before potentially sending things off to the
118
  # backend. This ensures all request types get the same information, most
119
  # notably POST requests getting a normalized user agent string to empower
177
  set req.http.Cookie = "frontend=crawler-session";
178
  } else {
179
  # it's a real user, make up a new session for them
180
+ {{generate_session}}
 
181
  }
182
  }
183
  if ({{force_cache_static}} &&
208
  set req.url = regsuball(req.url, "(?:(\?)&|\?$)", "\1");
209
  }
210
 
211
+ if({{send_unmodified_url}}) {
212
+ set req.http.X-Varnish-Cache-Url = req.url;
213
+ set req.url = req.http.X-Varnish-Origin-Url;
214
+ unset req.http.X-Varnish-Origin-Url;
215
+ }
216
 
217
  # everything else checks out, try and pull from the cache
218
  return (lookup);
233
  # }
234
 
235
  sub vcl_hash {
236
+
237
+ if({{send_unmodified_url}} && req.http.X-Varnish-Cache-Url) {
238
+ hash_data(req.http.X-Varnish-Cache-Url);
239
+ } else {
240
+ hash_data(req.url);
241
+ }
242
  if (req.http.Host) {
243
  hash_data(req.http.Host);
244
  } else {
366
  # else it's not part of Magento so use the default Varnish handling
367
  }
368
 
369
+ {{vcl_synth}}
370
+
371
  sub vcl_deliver {
372
  if (req.http.X-Varnish-Faked-Session) {
373
  # need to set the set-cookie header since we just made it out of thin air
app/code/community/Nexcessnet/Turpentine/misc/version-4.vcl CHANGED
@@ -16,12 +16,12 @@ vcl 4.0;
16
  # with this program; if not, write to the Free Software Foundation, Inc.,
17
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
 
19
- ## Nexcessnet_Turpentine Varnish v3 VCL Template
20
 
21
  ## Custom C Code
22
 
23
  C{
24
- # @source app/code/community/Nexcessnet/Turpentine/misc/uuid.c
25
  {{custom_c_code}}
26
  }C
27
 
@@ -102,6 +102,8 @@ sub generate_session_expires {
102
  ## Varnish Subroutines
103
 
104
  sub vcl_recv {
 
 
105
  # this always needs to be done so it's up at the top
106
  if (req.restarts == 0) {
107
  if (req.http.X-Forwarded-For) {
@@ -121,6 +123,11 @@ sub vcl_recv {
121
  return (pipe);
122
  }
123
 
 
 
 
 
 
124
  # remove double slashes from the URL, for higher cache hit rate
125
  set req.url = regsuball(req.url, "(.*)//+(.*)", "\1/\2");
126
 
@@ -168,8 +175,7 @@ sub vcl_recv {
168
  set req.http.Cookie = "frontend=crawler-session";
169
  } else {
170
  # it's a real user, make up a new session for them
171
- {{generate_session}}# call generate_session;
172
- return (pipe);
173
  }
174
  }
175
  if ({{force_cache_static}} &&
@@ -206,6 +212,12 @@ sub vcl_recv {
206
  set req.url = regsuball(req.url, "(?:(\?)&|\?$)", "\1");
207
  }
208
 
 
 
 
 
 
 
209
  # everything else checks out, try and pull from the cache
210
  return (hash);
211
  }
@@ -225,7 +237,13 @@ sub vcl_pipe {
225
  # }
226
 
227
  sub vcl_hash {
228
- hash_data(req.url);
 
 
 
 
 
 
229
  if (req.http.Host) {
230
  hash_data(req.http.Host);
231
  } else {
@@ -350,6 +368,8 @@ sub vcl_backend_response {
350
  # else it's not part of Magento so use the default Varnish handling
351
  }
352
 
 
 
353
  sub vcl_deliver {
354
  if (req.http.X-Varnish-Faked-Session) {
355
  # need to set the set-cookie header since we just made it out of thin air
16
  # with this program; if not, write to the Free Software Foundation, Inc.,
17
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
 
19
+ ## Nexcessnet_Turpentine Varnish v4 VCL Template
20
 
21
  ## Custom C Code
22
 
23
  C{
24
+ // @source app/code/community/Nexcessnet/Turpentine/misc/uuid.c
25
  {{custom_c_code}}
26
  }C
27
 
102
  ## Varnish Subroutines
103
 
104
  sub vcl_recv {
105
+ {{maintenance_allowed_ips}}
106
+
107
  # this always needs to be done so it's up at the top
108
  if (req.restarts == 0) {
109
  if (req.http.X-Forwarded-For) {
123
  return (pipe);
124
  }
125
 
126
+ if({{send_unmodified_url}}) {
127
+ # save the unmodified url
128
+ set req.http.X-Varnish-Origin-Url = req.url;
129
+ }
130
+
131
  # remove double slashes from the URL, for higher cache hit rate
132
  set req.url = regsuball(req.url, "(.*)//+(.*)", "\1/\2");
133
 
175
  set req.http.Cookie = "frontend=crawler-session";
176
  } else {
177
  # it's a real user, make up a new session for them
178
+ {{generate_session}}
 
179
  }
180
  }
181
  if ({{force_cache_static}} &&
212
  set req.url = regsuball(req.url, "(?:(\?)&|\?$)", "\1");
213
  }
214
 
215
+ if({{send_unmodified_url}}) {
216
+ set req.http.X-Varnish-Cache-Url = req.url;
217
+ set req.url = req.http.X-Varnish-Origin-Url;
218
+ unset req.http.X-Varnish-Origin-Url;
219
+ }
220
+
221
  # everything else checks out, try and pull from the cache
222
  return (hash);
223
  }
237
  # }
238
 
239
  sub vcl_hash {
240
+
241
+ if({{send_unmodified_url}} && req.http.X-Varnish-Cache-Url) {
242
+ hash_data(req.http.X-Varnish-Cache-Url);
243
+ } else {
244
+ hash_data(req.url);
245
+ }
246
+
247
  if (req.http.Host) {
248
  hash_data(req.http.Host);
249
  } else {
368
  # else it's not part of Magento so use the default Varnish handling
369
  }
370
 
371
+ {{vcl_synth}}
372
+
373
  sub vcl_deliver {
374
  if (req.http.X-Varnish-Faked-Session) {
375
  # need to set the set-cookie header since we just made it out of thin air
package.xml CHANGED
@@ -1,2 +1,2 @@
1
  <?xml version='1.0' encoding='utf-8'?>
2
- <package><name>Nexcessnet_Turpentine</name><license uri="http://opensource.org/licenses/GPL-2.0">GPLv2</license><notes>Supports Magento v1.6 and later</notes><time>10:26:41</time><__packager>build_package.py v0.0.3</__packager><summary>Improves Magento support for Varnish caching and generates 2.1 and 3.0 compatible VCLs.</summary><stability>stable</stability><__commit_hash>f89ae64fa0d5b415d4fcfbc1c15926d1482bcf38</__commit_hash><version>0.6.6</version><extends /><contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file hash="a0bd4a5632b369b058c0ec5262e0cc49" name="turpentine.xml" /></dir><dir name="template"><dir name="turpentine"><file hash="b564606032d111537d02c8da63470c39" name="varnish_management.phtml" /></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file hash="45405f2d1c0b5e915ffbd7da261d7ed0" name="turpentine_esi.xml" /></dir><dir name="template"><dir name="turpentine"><file hash="50798888953fd1550e4347c39e395d0a" name="notices.phtml" /><file hash="b268c48251ccfccf5c775d3e85513584" name="esi.phtml" /><file hash="02f341fdfd5194752e88cae9933cfcdb" name="ajax.phtml" /></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file hash="58848d4d90973bfd63b466ea181352a5" name="Nexcessnet_Turpentine.xml" /></dir></target><target name="magecommunity"><dir name="Nexcessnet"><dir name="Turpentine"><dir name="Helper"><file hash="7934848bff8108cfc67e34e0571bd271" name="Esi.php" /><file hash="802e269b0c80131efbb070309fdc610f" name="Varnish.php" /><file hash="913d0762f9df7696f1217f82791f1b78" name="Cron.php" /><file hash="0ee525f0fba5236f05ad2289fe2f2292" name="Data.php" /><file hash="6b637be4eac4c924fc1f02b2d49699c3" name="Ban.php" /><file hash="4a448ad2fe5b5a253a37d3f4aa3dd1bb" name="Debug.php" /></dir><dir name="misc"><file hash="70e05ae44a713d815580ddd1d51d2ebf" name="version-3.vcl" /><file hash="41bfbd36bdb9f3431bf832c1a6e0d758" name="version-4.vcl" /><file hash="ba5d5c7263cd90eea3785953e3549041" name="uuid.c" /><file hash="cd7651be0ea4c3cc6635ce19c967145b" name="version-2.vcl" /></dir><dir name="etc"><file hash="007fa66fb9c56746ebe2bed297716d47" name="system.xml" /><file hash="2f1d31071be7034f6cd78083b8ac1430" name="config.xml~" /><file hash="3b608fbcca3d307833d10604dff23966" name="cache.xml" /><file hash="2d043e15c922e9cc848f6e301354284a" name="config.xml" /></dir><dir name="controllers"><file hash="3446129075986c4143e9d74d5154cf64" name="EsiController.php" /><dir name="Adminhtml"><file hash="fb44492ff908e0dd28a4fa62e382bd3e" name="CacheController.php" /></dir><dir name="Varnish"><file hash="625118bfe342139b7fd9464c05d1b0a6" name="ManagementController.php" /></dir></dir><dir name="Model"><file hash="c2cb79001524617febbfddf099d09f37" name="Session.php" /><dir name="Shim"><dir name="Mage"><dir name="Core"><file hash="9e5d87f0aa84c9fb1541db83aba69abd" name="Config.php" /><file hash="821bff6c2fb372e3ffb39abf6453b3f8" name="Layout.php" /><file hash="4a1aa246373520936f0e4b5b3a3baf25" name="App.php" /></dir></dir></dir><dir name="PageCache"><dir name="Container"><file hash="139e8a9bfa209316036e798fff654a8a" name="Notices.php" /></dir></dir><dir name="Dummy"><file hash="f6611808da53ffa00561a8f76b26016e" name="Request.php" /></dir><dir name="Varnish"><file hash="d174c8dc29d3c4ab34ac0ee57f519d76" name="Admin.php" /><dir name="Admin"><file hash="44bae0667bc3c6402a38a3015ddfe657" name="Socket.php" /></dir><dir name="Configurator"><file hash="b831b872fcb05d9c723149159db0eed1" name="Version2.php" /><file hash="82d0abe0123272e59e6c319dfdd4e9dc" name="Version3.php" /><file hash="179b9529f2eef55964d25e56b85291a7" name="Version4.php" /><file hash="e644171fb26b0ad609e5b568b8619c5b" name="Abstract.php" /></dir></dir><dir name="Observer"><file hash="89d824842dc0194a8e29e97bbdab69ac" name="Esi.php" /><file hash="7244a8ce600e980d612409595b9b6b9b" name="Varnish.php" /><file hash="a34e79218e8ca1fefad303b9399bda9d" name="Cron.php" /><file hash="e3e1542dfcf56f2353dd62e39cfd3b98" name="Ban.php" /><file hash="9d57fad69ff42b71c66ca26bc3372317" name="Debug.php" /></dir><dir name="Core"><file hash="d4f63abc6d34c923c6e64a522b6fc36e" name="Session.php" /></dir><dir name="Config"><dir name="Select"><file hash="2e01b14592189b3f6a8a05be5ef4c69c" name="StripWhitespace.php" /><file hash="15b5296a7f7bc719331f14d34308013b" name="Version.php" /><file hash="2a4648995fc87472b2ac33b35a7d69e5" name="LoadBalancing.php" /><file hash="9348c5e58037fd97d89b84ccab4ef2d0" name="Toggle.php" /></dir></dir></dir><dir name="Block"><file hash="e9b03d651a8da9b1d32c4fd2f4781792" name="Management.php" /><file hash="390cf75d04b1b098cad562229b649c2d" name="Notices.php" /><dir name="Adminhtml"><dir name="Cache"><file hash="798cf7afa80e0a06be2b8c6cb2bef02b" name="Grid.php" /></dir></dir><dir name="Catalog"><dir name="Product"><dir name="List"><file hash="ce9fca4c273987759f284fe31c1597f5" name="Toolbar.php" /></dir></dir></dir><dir name="Product"><file hash="56ac2e90d0eed7eaadaf4517c1ad77ff" name="Compared.php" /><file hash="f72d0718ccd2895cbf4fc1cbc24bf90c" name="Viewed.php" /></dir><dir name="Core"><file hash="b34cad980a3e5da9860b21a7aa7a0b0f" name="Messages.php" /></dir><dir name="Poll"><file hash="bf9ca23a445776435e38e6c8be9976ea" name="ActivePoll.php" /></dir></dir></dir></dir></target></contents><dependencies><required><php><min>5.2.13</min><max>6.0.0</max></php></required></dependencies><authors><author><name>Chris Wells</name><user>nexcess_net</user><email>clwells@nexcess.net</email></author><author><name>Alex Headley</name><user>aheadley_nex</user><email>aheadley@nexcess.net</email></author></authors><date>2015-09-14</date><compatibile /><channel>community</channel><description>Turpentine is a Magento extension to improve Magento's compatibility with Varnish, a very-fast caching reverse-proxy. By default, Varnish doesn't cache requests with cookies and Magento sends the frontend cookie with every request causing a (near) zero hit-rate for Varnish's cache. Turpentine provides Varnish configuration files (VCLs) to work with Magento and modifies Magento's behaviour to significantly improve the cache hit rate.</description></package>
1
  <?xml version='1.0' encoding='utf-8'?>
2
+ <package><name>Nexcessnet_Turpentine</name><license uri="http://opensource.org/licenses/GPL-2.0">GPLv2</license><notes>Supports Magento v1.6 and later</notes><time>11:51:06</time><__packager>build_package.py v0.0.3</__packager><summary>Improves Magento support for Varnish caching and generates 2.1 and 3.0 compatible VCLs.</summary><stability>stable</stability><__commit_hash>c5e7ba20e9d703f3e6832850d90d9479ee0aa19f</__commit_hash><version>0.6.7</version><extends /><contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file hash="a0bd4a5632b369b058c0ec5262e0cc49" name="turpentine.xml" /></dir><dir name="template"><dir name="turpentine"><file hash="b564606032d111537d02c8da63470c39" name="varnish_management.phtml" /></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file hash="45405f2d1c0b5e915ffbd7da261d7ed0" name="turpentine_esi.xml" /></dir><dir name="template"><dir name="turpentine"><file hash="50798888953fd1550e4347c39e395d0a" name="notices.phtml" /><file hash="b268c48251ccfccf5c775d3e85513584" name="esi.phtml" /><file hash="02f341fdfd5194752e88cae9933cfcdb" name="ajax.phtml" /></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file hash="58848d4d90973bfd63b466ea181352a5" name="Nexcessnet_Turpentine.xml" /></dir></target><target name="magecommunity"><dir name="Nexcessnet"><dir name="Turpentine"><dir name="Helper"><file hash="7934848bff8108cfc67e34e0571bd271" name="Esi.php" /><file hash="802e269b0c80131efbb070309fdc610f" name="Varnish.php" /><file hash="913d0762f9df7696f1217f82791f1b78" name="Cron.php" /><file hash="0ee525f0fba5236f05ad2289fe2f2292" name="Data.php" /><file hash="6b637be4eac4c924fc1f02b2d49699c3" name="Ban.php" /><file hash="4a448ad2fe5b5a253a37d3f4aa3dd1bb" name="Debug.php" /></dir><dir name="misc"><file hash="05abb0bc318ae439f3a6bf53ba11f32a" name="version-3.vcl" /><file hash="1f3a0abeea9acb6d2ec33839dc82012c" name="version-4.vcl" /><file hash="ba5d5c7263cd90eea3785953e3549041" name="uuid.c" /><file hash="af0bd785669e738819536bb806a7ba13" name="version-2.vcl" /></dir><dir name="etc"><file hash="015d30af2e06ffae50e92291592be6d8" name="system.xml" /><file hash="db67350fe497dcb4482f47e297c349f7" name="config.xml~" /><file hash="3b608fbcca3d307833d10604dff23966" name="cache.xml" /><file hash="2a4bc61f3c6c68fc970707f8828f4046" name="config.xml" /></dir><dir name="controllers"><file hash="c871a1b17344f7e1e267a614bd8e7d5e" name="EsiController.php" /><dir name="Adminhtml"><file hash="fb44492ff908e0dd28a4fa62e382bd3e" name="CacheController.php" /></dir><dir name="Varnish"><file hash="625118bfe342139b7fd9464c05d1b0a6" name="ManagementController.php" /></dir></dir><dir name="Model"><file hash="c2cb79001524617febbfddf099d09f37" name="Session.php" /><dir name="Shim"><dir name="Mage"><dir name="Core"><file hash="9e5d87f0aa84c9fb1541db83aba69abd" name="Config.php" /><file hash="821bff6c2fb372e3ffb39abf6453b3f8" name="Layout.php" /><file hash="4a1aa246373520936f0e4b5b3a3baf25" name="App.php" /></dir></dir></dir><dir name="PageCache"><dir name="Container"><file hash="139e8a9bfa209316036e798fff654a8a" name="Notices.php" /></dir></dir><dir name="Dummy"><file hash="f6611808da53ffa00561a8f76b26016e" name="Request.php" /></dir><dir name="Varnish"><file hash="d174c8dc29d3c4ab34ac0ee57f519d76" name="Admin.php" /><dir name="Admin"><file hash="69828f635e7ce3378fb9aaf861be0b3c" name="Socket.php" /></dir><dir name="Configurator"><file hash="b831b872fcb05d9c723149159db0eed1" name="Version2.php" /><file hash="82d0abe0123272e59e6c319dfdd4e9dc" name="Version3.php" /><file hash="179b9529f2eef55964d25e56b85291a7" name="Version4.php" /><file hash="0672d5ca172564bc4e9457fdfc0a5264" name="Abstract.php" /></dir></dir><dir name="Observer"><file hash="bcc39edc7065ad9d94235211b9e940ca" name="Esi.php" /><file hash="7244a8ce600e980d612409595b9b6b9b" name="Varnish.php" /><file hash="a34e79218e8ca1fefad303b9399bda9d" name="Cron.php" /><file hash="e3e1542dfcf56f2353dd62e39cfd3b98" name="Ban.php" /><file hash="9d57fad69ff42b71c66ca26bc3372317" name="Debug.php" /></dir><dir name="Core"><file hash="d4f63abc6d34c923c6e64a522b6fc36e" name="Session.php" /></dir><dir name="Config"><dir name="Select"><file hash="2e01b14592189b3f6a8a05be5ef4c69c" name="StripWhitespace.php" /><file hash="15b5296a7f7bc719331f14d34308013b" name="Version.php" /><file hash="2a4648995fc87472b2ac33b35a7d69e5" name="LoadBalancing.php" /><file hash="9348c5e58037fd97d89b84ccab4ef2d0" name="Toggle.php" /></dir></dir></dir><dir name="Block"><file hash="e9b03d651a8da9b1d32c4fd2f4781792" name="Management.php" /><file hash="390cf75d04b1b098cad562229b649c2d" name="Notices.php" /><dir name="Adminhtml"><dir name="Cache"><file hash="798cf7afa80e0a06be2b8c6cb2bef02b" name="Grid.php" /></dir></dir><dir name="Catalog"><dir name="Product"><dir name="List"><file hash="ce9fca4c273987759f284fe31c1597f5" name="Toolbar.php" /></dir></dir></dir><dir name="Product"><file hash="56ac2e90d0eed7eaadaf4517c1ad77ff" name="Compared.php" /><file hash="f72d0718ccd2895cbf4fc1cbc24bf90c" name="Viewed.php" /></dir><dir name="Core"><file hash="b34cad980a3e5da9860b21a7aa7a0b0f" name="Messages.php" /></dir><dir name="Poll"><file hash="bf9ca23a445776435e38e6c8be9976ea" name="ActivePoll.php" /></dir></dir></dir></dir></target></contents><dependencies><required><php><min>5.2.13</min><max>6.0.0</max></php></required></dependencies><authors><author><name>Chris Wells</name><user>nexcess_net</user><email>clwells@nexcess.net</email></author><author><name>Alex Headley</name><user>aheadley_nex</user><email>aheadley@nexcess.net</email></author></authors><date>2015-10-12</date><compatibile /><channel>community</channel><description>Turpentine is a Magento extension to improve Magento's compatibility with Varnish, a very-fast caching reverse-proxy. By default, Varnish doesn't cache requests with cookies and Magento sends the frontend cookie with every request causing a (near) zero hit-rate for Varnish's cache. Turpentine provides Varnish configuration files (VCLs) to work with Magento and modifies Magento's behaviour to significantly improve the cache hit rate.</description></package>