how can I cache upstream by mime type in nginx

Drweb Mike cncaiker+nginx at gmail.com
Tue Nov 1 16:29:49 UTC 2022


hi there

My front end is nginx using reverse proxy work with my backend, I was
trying to cache images files only, but it seems doesn't work at all, the
*$no_cache* always output default value "proxy", which should be "0" when I
visit image files

here it is my config

map $upstream_http_content_type $no_cache {
> default proxy;
> "~*image" 0;
> }
> proxy_store on;
> proxy_temp_path /tmp/ngx_cache;
> proxy_cache_path /tmp/ngx_cache/pcache levels=1:2 use_temp_path=on
> keys_zone=pcache:10m inactive=14d max_size=3g;
> log_format upstreamlog '$server_addr:$host:$server_port
> $remote_addr:$remote_port $remote_user [$time_local] '
> '"$request" $status $request_length $body_bytes_sent [$request_time] '
> '"$http_referer" "$http_user_agent" "$http_x_forwarded_for" - '
> 'upstream: $upstream_addr - $upstream_status - upstream_response_time:
> $upstream_response_time $upstream_http_content_type $skip_cache :
> $no_cache';
> server{
> .....
> if ($skip_cache = false){
> set $skip_cache 0;
> }
> if ($no_cache = false){
> set $no_cache 0;
> }
> if ($request_method = POST) {
> set $skip_cache 1;
> }
> if ($query_string != "") {
> set $skip_cache 1;
> }
> if ($http_cache_control ~* "private") {
> set $skip_cache 1;
> }
> if ($upstream_http_cache_control ~* "private") {
> set $skip_cache 1;
> }
> location / {
> proxy_cache_key "$http_host$uri$is_args$args";
> proxy_cache pcache;
> add_header X-Cache-Status $upstream_cache_status;
> proxy_cache_bypass $http_pragma $http_authorization $skip_cache;
> proxy_no_cache $http_pragma $http_authorization $skip_cache $no_cache;
> proxy_pass http://$backend;
> access_log /dev/stdout upstreamlog;
> }
> }

the curl test output

> HTTP/1.1 200 OK
> Server: nginx
> Date: Sun, 30 Oct 2022 17:22:56 GMT
> Content-Type: image/jpeg
> Content-Length: 56769
> Connection: keep-alive
> Last-Modified: Tue, 19 Jul 2022 03:27:34 GMT
> ETag: "62d624a6-ddc1"
> Cache-Control: public, max-age=604800, s-maxage=1209600, stale-if-error=400
> X-Cache-Status: MISS
> Accept-Ranges: bytes



why *$upstream_http_content_type* map doesn't works as expected
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20221102/7ebda953/attachment.htm>


More information about the nginx mailing list