From cc9e7d4f227adfc71ace598eec4dd94cffe64c82 Mon Sep 17 00:00:00 2001 From: GRMrGecko Date: Thu, 1 Aug 2024 08:08:51 -0500 Subject: [PATCH] Fix lack of exclude check, add usage examples, update examples to use server_name instead of host. --- README.md | 47 +++++++++++++++++++++++++++++++++++------------ main.go | 15 ++++++++++++--- 2 files changed, 47 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 9620eaf..1074c6d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # nginx-cache-purge -A tool to help purge Nginx cache. It can either run locally with the purge command, or run as a local unix service to allow for purging by Nginx http requests. +A tool to help purge Nginx cache. It can either run locally with the purge command, or run as a local unix service to allow for purging by Nginx http requests. The tool supports using wildcard/glob syntax in the purge key to match multiple keys from the cache. ## Install You can install either by downloading the latest binary release, or by building. @@ -10,6 +10,29 @@ Building should be as simple as running: go build ``` +## Usage +The following are some examples of ways to purge cache + +### Purge a specific key +``` +$ nginx-cache-purge purge /var/nginx/proxy_temp/cache example.com/index.html +``` + +### Purge all keys for a domain +``` +$ nginx-cache-purge purge /var/nginx/proxy_temp/cache 'example.com/*' +``` + +### Purge all keys for jpeg and png files +``` +$ nginx-cache-purge purge /var/nginx/proxy_temp/cache 'example.com/*.{jpg,jpeg,png}' +``` + +### Purge all keys +``` +$ nginx-cache-purge purge /var/nginx/proxy_temp/cache '*' +``` + ## Running as a service If you want to run as a service to allow purge requests via http requests, you'll need to create a systemd service file and place it in `/etc/systemd/system/nginx-cache-purge.service`. ``` @@ -48,13 +71,13 @@ http { } proxy_cache_path /var/nginx/proxy_temp/cache levels=1:2 keys_zone=my_cache:10m; - proxy_cache_key $host$request_uri; + proxy_cache_key $server_name$request_uri; server { location / { if ($is_purge) { proxy_pass http://unix:/var/run/nginx-cache-purge/http.sock; - rewrite ^ /?path=/var/nginx/proxy_temp/cache&key=$host$request_uri break; + rewrite ^ /?path=/var/nginx/proxy_temp/cache&key=$server_name$request_uri break; } proxy_cache my_cache; @@ -73,13 +96,13 @@ http { } proxy_cache_path /var/nginx/proxy_temp/cache levels=1:2 keys_zone=my_cache:10m; - proxy_cache_key $host$request_uri; + proxy_cache_key $server_name$request_uri; server { location / { if ($is_purge) { proxy_pass http://unix:/var/run/nginx-cache-purge/http.sock; - rewrite ^ /?path=/var/nginx/proxy_temp/cache&key=$host$request_uri break; + rewrite ^ /?path=/var/nginx/proxy_temp/cache&key=$server_name$request_uri break; } proxy_cache my_cache; @@ -98,13 +121,13 @@ http { } proxy_cache_path /var/nginx/proxy_temp/cache levels=1:2 keys_zone=my_cache:10m; - proxy_cache_key $host$request_uri; + proxy_cache_key $server_name$request_uri; server { location / { if ($is_purge) { proxy_pass http://unix:/var/run/nginx-cache-purge/http.sock; - rewrite ^ /?path=/var/nginx/proxy_temp/cache&key=$host$request_uri break; + rewrite ^ /?path=/var/nginx/proxy_temp/cache&key=$server_name$request_uri break; } proxy_cache my_cache; @@ -118,7 +141,7 @@ http { ``` http { proxy_cache_path /var/nginx/proxy_temp/cache levels=1:2 keys_zone=my_cache:10m; - proxy_cache_key $host$request_uri; + proxy_cache_key $server_name$request_uri; server { location / { @@ -129,7 +152,7 @@ http { allow 127.0.0.1; deny all; proxy_pass http://unix:/var/run/nginx-cache-purge/http.sock; - rewrite ^ /?path=/var/nginx/proxy_temp/cache&key=$host$1 break; + rewrite ^ /?path=/var/nginx/proxy_temp/cache&key=$server_name$1 break; } } } @@ -137,7 +160,7 @@ http { ## Help ``` -$ ./nginx-cache-purge --help +$ nginx-cache-purge --help Usage: nginx-cache-purge [flags] Tool to help purge cache from Nginx @@ -152,7 +175,7 @@ Commands: Run "nginx-cache-purge --help" for more information on a command. -$ ./nginx-cache-purge p --help +$ nginx-cache-purge p --help Usage: nginx-cache-purge purge (p) [flags] Purge cache now @@ -167,7 +190,7 @@ Flags: --exclude-key=EXCLUDE-KEY,... Key to exclude, can be wild card and can add multiple excludes. -$ ./nginx-cache-purge s --help +$ nginx-cache-purge s --help Usage: nginx-cache-purge server (s) [flags] Run the server diff --git a/main.go b/main.go index 33a178c..399f948 100644 --- a/main.go +++ b/main.go @@ -17,7 +17,7 @@ import ( const ( serviceName = "nginx-cache-purge" serviceDescription = "Tool to help purge Nginx cache " - serviceVersion = "0.1" + serviceVersion = "0.1.1" ) // App structure to access global app variables. @@ -118,11 +118,20 @@ func (a *App) PurgeCache(CachePath string, Key string, ExcludeKeys []string) err } defer file.Close() scanner := bufio.NewScanner(file) + // Scan file for the key. for scanner.Scan() { line := scanner.Text() + // If line is the key, check if it matches our glob pattern and delete. if strings.HasPrefix(line, "KEY: ") { - key := line[5:] - if g.Match(key) { + keyRead := line[5:] + if g.Match(keyRead) { + // If excluded, skip the key. + if keyIsExcluded(keyRead) { + fmt.Println("Key", keyRead, "is excluded, will not purge.") + return nil + } + + // Delete the file. fmt.Printf("Purging %s as it matches the key %s requested to be purged.\n", filePath, Key) err := os.Remove(filePath) if err != nil {