Nginx reverse cache 301 redirects (permanent)
Is it possible to have Nginx cache all 301
redirect requests for proxy_pass
?
For example:
Request #1: Client A requests /some/path -> sent to proxy_pass
-> results in 301 redirect to /some/other/path
-> nginx caches this response since it's a 301 redirect.
Request #2: Client B requests /some/path -> nginx returns cached 301 redirect to /some/other/path
.
Solution 1:
nginx already can cache 301 redirects. You can change the amount of time they are cached with the proxy_cache_valid directive:
proxy_cache_valid 301 365d; # Cache permanent redirects for a whole year
Solution 2:
I found that @Michael's answer got me most of the way there, but when I turned on proxy_cache
, it would automatically cache files with Expires
and Cache-Control
. So I ended up with this solution.
proxy_cache_path /tmp/nginx levels=1:2 keys_zone=main-cache:8m max_size=1000m inactive=600m;
proxy_temp_path /tmp/nginx/tmp;
proxy_cache main-cache;
proxy_cache_valid 301 60m;
proxy_cache_key "$scheme://$host$request_uri";
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;