Solution - Re: Problem with proxy cache misses

CJ Ess zxcvbn4038 at gmail.com
Mon Feb 29 23:30:21 UTC 2016


Found it! The solution was in a a mailing list item from 2012. You have to
turn proxy buffering on in order for the proxy cache to work. I'm caching
like a champ now.

There probably ought to be a warning about that someplace, or it should be
in the docs someplace.


On Mon, Feb 29, 2016 at 2:03 PM, CJ Ess <zxcvbn4038 at gmail.com> wrote:

> Hello! I'm testing out a new configuration and there are two issues with
> the proxy cacheing feature I'm getting stuck on.
>
> 1) Everything is a cache miss, and I'm not sure why:
>
> My cache config (anonymized):
>
> ...
> proxy_cache_path /var/www/test_cache levels=2:2 keys_zone=TEST:32m
> inactive=365d max_size=16g loader_files=256;
> ...
>   upstream haproxy {
>     server 127.0.0.1:8080;
>     keepalive 256;
>   }
> ...
>     location ~ "^/[W][A-Za-z0-9_-]{7,13}$" {
>       limit_except GET {
>         deny  all;
>       }
>       proxy_http_version 1.1;
>       proxy_set_header Connection "Close"; # Disable Keepalives
>       proxy_set_header Host "www.testhost.com"; # Upstream requires this
> value
>       proxy_set_header X-Real-IP $remote_addr;
>       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>       proxy_set_header X-Forwarded-Proto https;
>       proxy_cache TEST;
>       proxy_cache_key $uri;
>       proxy_cache_valid 301 365d;
>       proxy_cache_valid 302 1d;
>       proxy_cache_lock on;
>       proxy_buffering off;
>       proxy_pass http://haproxy;
>     }
> ...
>
> A sample response coming back from the upstream (captured with wireshark)
>
> HTTP/1.1 301 Moved Permanently
> Date: Mon, 29 Feb 2016 18:16:02 GMT
> Content-Type: text/html
> Transfer-Encoding: chunked
> Connection: close
> P3P: CP="some text"
> X-Frame-Options: deny
> Location: http://some.test.url/
>
> 0
>
> The cache directory is owned by the nginx user, perms 0700.
>
> I'm expecting the 301 in the example above to be cached for a year, but
> nothing is created under /var/www/test_cache, and subsequent requests for
> the same resources are also cache misses.
>
> 2) For each URL which doesn't match any of the location blocks, I am
> seeing an error in the log file:
>
> 2016/02/29 13:55:20 [error] 19524#0: *1509121054 open()
> "/var/www/html/W4ud7y1k4jjbj" failed (2: No such file or directory),
> client: a.b.c.d, server:test.com, request: "HEAD /W4ud7y1k4jjbj
> HTTP/1.1", host: "test.com"
>
> There is a "root /var/www/html" defined in the http block, although there
> is only one specific location which uses it:
>
>     location = /apple-app-site-association {
>       default_type application/pkcs7-mime;
>       break;
>     }
>
> And the final location block in my server config is:
>
>     location = / {
>       rewrite ^ https://www.someother.test.com/ permanent;
>       break;
>     }
>
> So my expectation is that since the request matches none of the location
> blocks, nginx will just issue a 404 response. However from the error log,
> it looks like it is trying the root directory first before issuing the 404.
> Is there some way to prevent that?
>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20160229/7d996d0e/attachment.html>


More information about the nginx mailing list