Fix lack of exclude check, add usage examples, update examples to use server_name instead of host.
This commit is contained in:
parent
a1661a4122
commit
cc9e7d4f22
47
README.md
47
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 <command> [flags]
|
||||
|
||||
Tool to help purge cache from Nginx
|
||||
@ -152,7 +175,7 @@ Commands:
|
||||
|
||||
Run "nginx-cache-purge <command> --help" for more information on a command.
|
||||
|
||||
$ ./nginx-cache-purge p --help
|
||||
$ nginx-cache-purge p --help
|
||||
Usage: nginx-cache-purge purge (p) <cache-path> <key> [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
|
||||
|
15
main.go
15
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 {
|
||||
|
Loading…
Reference in New Issue
Block a user