key scheme change added

This commit is contained in:
Peter Molnar 2013-06-17 12:28:49 +01:00
parent 0c368e2bb9
commit 23ee5f0109
7 changed files with 63 additions and 29 deletions

View file

@ -93,6 +93,7 @@ What's new:
* additional cookie patterns to exclude visitors from cache * additional cookie patterns to exclude visitors from cache
* syslog dropped; using standard PHP log instead, combined with WP_DEBUG to change to info/notice level * syslog dropped; using standard PHP log instead, combined with WP_DEBUG to change to info/notice level
* possibility to start pre-cache from wp-cron * possibility to start pre-cache from wp-cron
* changeable key scheme ( was fixed previously )
What's fixed: What's fixed:

@ -1 +1 @@
Subproject commit c862af55f464e366dd6f44d20dcf709d0b5bbe51 Subproject commit fe3a3c9c52091f21924de59d379442201e8a059a

View file

@ -69,8 +69,8 @@ if ( isset($wp_ffpc_config['nocache_cookies']) && !empty($wp_ffpc_config['nocach
/* canonical redirect storage */ /* canonical redirect storage */
$wp_ffpc_redirect = null; $wp_ffpc_redirect = null;
/* fires up the backend storage array with current config */ /* fires up the backend storage array with current config */
include_once ('wp-ffpc-backend.php');
$wp_ffpc_backend = new WP_FFPC_Backend( $wp_ffpc_config ); $wp_ffpc_backend = new WP_FFPC_Backend( $wp_ffpc_config );
/* no cache for for logged in users unless it's set /* no cache for for logged in users unless it's set

View file

@ -44,6 +44,7 @@ if (!class_exists('WP_FFPC_Backend')) {
private $options = array(); private $options = array();
private $status = array(); private $status = array();
public $cookies = array(); public $cookies = array();
private $urimap = array();
private $utilities; private $utilities;
/** /**
@ -59,7 +60,14 @@ if (!class_exists('WP_FFPC_Backend')) {
$this->cookies = array ( 'comment_author_' , 'wordpressuser_' , 'wp-postpass_', 'wordpress_logged_in_' ); $this->cookies = array ( 'comment_author_' , 'wordpressuser_' , 'wp-postpass_', 'wordpress_logged_in_' );
$this->utilities = WP_Plugins_Utilities::Utility(); $this->utilities = WP_Plugins_Utilities_v1::Utility();
$this->urimap = array(
'$scheme' => str_replace ( '://', '', $this->utilities->replace_if_ssl ( 'http://' ) ),
'$host' => $_SERVER['HTTP_HOST'],
'$request_uri' => $_SERVER['REQUEST_URI'],
'$remote_user' => $_SERVER['REMOTE_USER'],
);
/* no config, nothing is going to work */ /* no config, nothing is going to work */
if ( empty ( $this->options ) ) { if ( empty ( $this->options ) ) {
@ -85,14 +93,12 @@ if (!class_exists('WP_FFPC_Backend')) {
* *
*/ */
public function key ( &$prefix ) { public function key ( &$prefix ) {
/* use the full accessed URL string as key, same will be generated by nginx as well /* data is string only with content, meta is not used in nginx */
we need a data and a meta key: data is string only with content, meta is not used in nginx */ $key = str_replace ( array_keys( $this->urimap ), $this->urimap, $this->options['key'] );
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) $this->log ( __translate__('original key configuration: ', $this->plugin_constant ) . $this->options['key'] );
$_SERVER['HTTPS'] = 'on'; $this->log ( __translate__('setting key to: ', $this->plugin_constant ) . $key );
$protocol = ( isset($_SERVER['HTTPS']) && ( ( strtolower($_SERVER['HTTPS']) == 'on' ) || ( $_SERVER['HTTPS'] == '1' ) ) ) ? 'https://' : 'http://'; return $key;
return $prefix . $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
} }

View file

@ -10,7 +10,6 @@
*/ */
if ( ! class_exists( 'WP_FFPC' ) ) { if ( ! class_exists( 'WP_FFPC' ) ) {
/* get the plugin abstract class*/ /* get the plugin abstract class*/
include_once ( 'wp-common/wp-plugin-abstract.php' ); include_once ( 'wp-common/wp-plugin-abstract.php' );
/* get the common functions class*/ /* get the common functions class*/
@ -29,7 +28,7 @@ if ( ! class_exists( 'WP_FFPC' ) ) {
* @var array $select_invalidation_method Invalidation methods string array * @var array $select_invalidation_method Invalidation methods string array
* *
*/ */
class WP_FFPC extends WP_Plugins_Abstract { class WP_FFPC extends WP_Plugins_Abstract_v2 {
const host_separator = ','; const host_separator = ',';
const port_separator = ':'; const port_separator = ':';
const donation_id_key = 'hosted_button_id='; const donation_id_key = 'hosted_button_id=';
@ -63,7 +62,7 @@ if ( ! class_exists( 'WP_FFPC' ) ) {
protected $select_invalidation_method = array (); protected $select_invalidation_method = array ();
protected $select_schedules = array(); protected $select_schedules = array();
protected $valid_cache_type = array (); protected $valid_cache_type = array ();
protected $list_uri_vars = array();
private $shell_function = false; private $shell_function = false;
private $shell_possibilities = array (); private $shell_possibilities = array ();
private $backend = NULL; private $backend = NULL;
@ -130,6 +129,17 @@ if ( ! class_exists( 'WP_FFPC' ) ) {
2 => __( 'modified post and all taxonomies' , $this->plugin_constant ), 2 => __( 'modified post and all taxonomies' , $this->plugin_constant ),
); );
$this->list_uri_vars = array (
'$scheme' => __('The HTTP scheme (i.e. http, https).', $this->plugin_constant ),
'$host' => __('Host in the header of request or name of the server processing the request if the Host header is not available.', $this->plugin_constant ),
'$request_uri' => __('The *original* request URI as received from the client including the args', $this->plugin_constant ),
'$remote_user' => __('Name of user, authenticated by the Auth Basic Module', $this->plugin_constant ),
//'$cookie_COOKnginy IE' => __('Value of COOKIE', $this->plugin_constant ),
//'$http_HEADER' => __('Value of HTTP request header HEADER ( lowercase, dashes converted to underscore )', $this->plugin_constant ),
//'$query_string' => __('Full request URI after rewrites', $this->plugin_constant ),
//'' => __('', $this->plugin_constant ),
);
$wp_schedules = wp_get_schedules(); $wp_schedules = wp_get_schedules();
$schedules['null'] = __( 'do not use timed precache' ); $schedules['null'] = __( 'do not use timed precache' );
foreach ( $wp_schedules as $interval=>$details ) { foreach ( $wp_schedules as $interval=>$details ) {
@ -217,14 +227,16 @@ if ( ! class_exists( 'WP_FFPC' ) ) {
/* save parameter updates, if there are any */ /* save parameter updates, if there are any */
if ( isset( $_POST[ $this->button_flush ] ) ) { if ( isset( $_POST[ $this->button_flush ] ) ) {
update_option( self::precache_log , '' ); $this->_delete_option( self::precache_log );
update_option( self::precache_timestamp , '' ); $this->_delete_option( self::precache_timestamp );
if ( @file_exists ( $this->precache_logfile ) ) if ( @file_exists ( $this->precache_logfile ) ) {
unlink ( $this->precache_logfile ); unlink ( $this->precache_logfile );
}
if ( @file_exists ( $this->precache_phpfile ) ) if ( @file_exists ( $this->precache_phpfile ) ) {
unlink ( $this->precache_phpfile ); unlink ( $this->precache_phpfile );
}
$this->backend->clear( false, true ); $this->backend->clear( false, true );
$this->status = 3; $this->status = 3;
@ -439,6 +451,20 @@ if ( ! class_exists( 'WP_FFPC' ) ) {
<input type="text" name="prefix_meta" id="prefix_meta" value="<?php echo $this->options['prefix_meta']; ?>" /> <input type="text" name="prefix_meta" id="prefix_meta" value="<?php echo $this->options['prefix_meta']; ?>" />
<span class="description"><?php _e('Prefix for meta content keys, used only with PHP processing.', $this->plugin_constant); ?></span> <span class="description"><?php _e('Prefix for meta content keys, used only with PHP processing.', $this->plugin_constant); ?></span>
</dd> </dd>
<dt>
<label for="key"><?php _e('Key scheme', $this->plugin_constant); ?></label>
</dt>
<dd>
<input type="text" name="key" id="key" value="<?php echo $this->options['key']; ?>" />
<span class="description"><?php _e('Key layout; <strong>use the guide below to change it</strong>. Changing this requires changes in the nginx configuration and restarting nginx, if nginx memcached is in use.', $this->plugin_constant); ?><?php ?></span>
<dl class="description"><?php
foreach ( $this->list_uri_vars as $uri => $desc ) {
echo '<dt>'. $uri .'</dt><dd>'. $desc .'</dd>';
}
?></dl>
</dd>
</dl> </dl>
</fieldset> </fieldset>
@ -450,7 +476,7 @@ if ( ! class_exists( 'WP_FFPC' ) ) {
</dt> </dt>
<dd> <dd>
<input type="checkbox" name="log" id="log" value="1" <?php checked($this->options['log'],true); ?> /> <input type="checkbox" name="log" id="log" value="1" <?php checked($this->options['log'],true); ?> />
<span class="description"><?php _e('Enables ERROR and WARNING level syslog messages. Requires PHP syslog function.', $this->plugin_constant); ?></span> <span class="description"><?php _e('Enables log messages; if <a href="http://codex.wordpress.org/WP_DEBUG">WP_DEBUG</a> is enabled, notices and info level is displayed as well, otherwie only ERRORS are logged.', $this->plugin_constant); ?></span>
</dd> </dd>
<dt> <dt>
@ -602,7 +628,7 @@ if ( ! class_exists( 'WP_FFPC' ) ) {
} }
else { ?> else { ?>
<p><strong><?php _e( 'Time of run: ') ?><?php echo date('r', $gentime ); ?></strong></p> <p><strong><?php _e( 'Time of run: ') ?><?php echo date('r', $gentime ); ?></strong></p>
<table style="width:100%; border: 1px solid #ccc;"> <div style="overflow: auto; max-height: 20em;"><table style="width:100%; border: 1px solid #ccc;">
<thead><tr> <thead><tr>
<?php $head = explode( " ", array_shift( $log )); <?php $head = explode( " ", array_shift( $log ));
foreach ( $head as $column ) { ?> foreach ( $head as $column ) { ?>
@ -618,7 +644,7 @@ if ( ! class_exists( 'WP_FFPC' ) ) {
<?php } ?> <?php } ?>
</tr> </tr>
<?php } ?> <?php } ?>
</table> </table></div>
<?php } ?> <?php } ?>
</fieldset> </fieldset>
@ -798,7 +824,7 @@ if ( ! class_exists( 'WP_FFPC' ) ) {
/* add the required includes and generate the needed code */ /* add the required includes and generate the needed code */
$string[] = "<?php"; $string[] = "<?php";
$string[] = self::global_config_var . ' = ' . var_export ( $this->global_config, true ) . ';' ; $string[] = self::global_config_var . ' = ' . var_export ( $this->global_config, true ) . ';' ;
$string[] = "include_once ('" . $this->acache_backend . "');"; //$string[] = "include_once ('" . $this->acache_backend . "');";
$string[] = "include_once ('" . $this->acache_worker . "');"; $string[] = "include_once ('" . $this->acache_worker . "');";
$string[] = "?>"; $string[] = "?>";
@ -818,7 +844,7 @@ if ( ! class_exists( 'WP_FFPC' ) ) {
/* replace the data prefix with the configured one */ /* replace the data prefix with the configured one */
$to_replace = array ( 'DATAPREFIX' , 'SERVERROOT', 'SERVERLOG' ); $to_replace = array ( 'DATAPREFIX' , 'SERVERROOT', 'SERVERLOG' );
$replace_with = array ( $this->options['prefix_data'], ABSPATH, $_SERVER['SERVER_NAME'] ); $replace_with = array ( $this->options['prefix_data'] . $this->options['key'] , ABSPATH, $_SERVER['SERVER_NAME'] );
$nginx = str_replace ( $to_replace , $replace_with , $nginx ); $nginx = str_replace ( $to_replace , $replace_with , $nginx );
/* set upstream servers from configured servers, best to get from the actual backend */ /* set upstream servers from configured servers, best to get from the actual backend */
@ -909,12 +935,12 @@ if ( ! class_exists( 'WP_FFPC' ) ) {
$starttime = $starttime[1] + $starttime[0]; $starttime = $starttime[1] + $starttime[0];
$page = file_get_contents( $permalink ); $page = file_get_contents( $permalink );
$size = round ( ( strlen ( $page ) / 1024 ), 3 ); $size = round ( ( strlen ( $page ) / 1024 ), 2 );
$endtime = explode ( " ", microtime() ); $endtime = explode ( " ", microtime() );
$endtime = ( $endtime[1] + $endtime[0] ) - $starttime; $endtime = round( ( $endtime[1] + $endtime[0] ) - $starttime, 2 );
echo $permalink . "\t" . $endtime . "\t" . $size . "\n"; echo $permalink . "\t" . $endtime . "\t" . $size . "\n";
unset ( $page, $size, $starttime, $endtime ); unset ( $page, $size, $starttime, $endtime );
sleep( 1 ); sleep( 1 );
} }

View file

@ -79,7 +79,7 @@ MEMCACHED_SERVERS
# try to get result from memcached # try to get result from memcached
location @memcached { location @memcached {
default_type text/html; default_type text/html;
set $memcached_key DATAPREFIX$scheme://$host$request_uri; set $memcached_key DATAPREFIX;
set $memcached_request 1; set $memcached_request 1;
# exceptions # exceptions

View file

@ -47,7 +47,8 @@ $wp_ffpc_defaults = array (
'persistent' => false, 'persistent' => false,
'response_header' => false, 'response_header' => false,
'generate_time' => false, 'generate_time' => false,
'precache_schedule' => 'null' 'precache_schedule' => 'null',
'key' => '$scheme://$host$request_uri',
); );
$wp_ffpc = new WP_FFPC ( 'wp-ffpc', '1.2', 'WP-FFPC', $wp_ffpc_defaults, 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=XU3DG7LLA76WC' ); $wp_ffpc = new WP_FFPC ( 'wp-ffpc', '1.2', 'WP-FFPC', $wp_ffpc_defaults, 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=XU3DG7LLA76WC' );