PURGE for caching reverse-proxies like Squid or Varnish
This commit is contained in:
parent
24932a15bf
commit
0137b96464
@ -661,6 +661,14 @@
|
|||||||
// Keep the Google Analytics cookies to one domain -- ga._setDomainName()
|
// Keep the Google Analytics cookies to one domain -- ga._setDomainName()
|
||||||
// $config['google_analytics_domain'] = 'www.example.org';
|
// $config['google_analytics_domain'] = 'www.example.org';
|
||||||
|
|
||||||
|
// If you use Varnish, Squid, or any similar caching reverse-proxy in front of Tinyboard,
|
||||||
|
// you can configure Tinyboard to PURGE files when they're written to
|
||||||
|
//$config['purge'] = Array(
|
||||||
|
// Array('127.0.0.1', 80)
|
||||||
|
//);
|
||||||
|
// Connection timeout, in seconds
|
||||||
|
$config['purge_timeout'] = 3;
|
||||||
|
|
||||||
if($_SERVER['SCRIPT_FILENAME'] == str_replace('\\', '/', __FILE__)) {
|
if($_SERVER['SCRIPT_FILENAME'] == str_replace('\\', '/', __FILE__)) {
|
||||||
// You cannot request this file directly.
|
// You cannot request this file directly.
|
||||||
header('Location: ../', true, 302);
|
header('Location: ../', true, 302);
|
||||||
|
@ -218,6 +218,25 @@
|
|||||||
} else return false;
|
} else return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function purge($uri) {
|
||||||
|
global $config;
|
||||||
|
$uri = (str_replace('\\', '/', dirname($_SERVER['REQUEST_URI'])) == '/' ? '/' : str_replace('\\', '/', dirname($_SERVER['REQUEST_URI'])) . '/') . $uri;
|
||||||
|
$request = "PURGE {$uri} HTTP/1.0\r\nHost: {$_SERVER['HTTP_HOST']}\r\nUser-Agent: Tinyboard\r\nConnection: Close\r\n\r\n";
|
||||||
|
|
||||||
|
foreach($config['purge'] as &$purge) {
|
||||||
|
$host = $purge[0];
|
||||||
|
$port = $purge[1];
|
||||||
|
if($fp = fsockopen($host, $port, $errno, $errstr, $config['purge_timeout'])) {
|
||||||
|
fwrite($fp, $request);
|
||||||
|
fclose($fp);
|
||||||
|
} else {
|
||||||
|
// Cannot connect?
|
||||||
|
error('Could not PURGE for ' . $host);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function file_write($path, $data) {
|
function file_write($path, $data) {
|
||||||
global $config;
|
global $config;
|
||||||
if(preg_match('/^scp:\/\/(.+)$/', $path, $m)) {
|
if(preg_match('/^scp:\/\/(.+)$/', $path, $m)) {
|
||||||
@ -233,6 +252,15 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(isset($config['purge']) && isset($_SERVER['HTTP_HOST'])) {
|
||||||
|
// Purge cache
|
||||||
|
if(basename($path) == $config['file_index']) {
|
||||||
|
// Index file (/index.html); purge "/" as well
|
||||||
|
purge(dirname($path) . '/');
|
||||||
|
}
|
||||||
|
purge($path);
|
||||||
|
}
|
||||||
|
|
||||||
if(!$fp = fopen($path, 'c'))
|
if(!$fp = fopen($path, 'c'))
|
||||||
error('Unable to open file for writing: ' . $path);
|
error('Unable to open file for writing: ' . $path);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user