Possible to modify response headers from a proxied request before the response is written do the cache? (modified headers should be written to disk)
mdounin at mdounin.ru
Tue Mar 12 12:43:23 UTC 2019
On Tue, Mar 12, 2019 at 12:57:59AM +0100, Manuel wrote:
> nginx writes the rsponse from a proxy to disk. eg.
> Server: nginx
> Date: Mon, 11 Mar 2019 23:23:28 GMT
> Content-Type: image/png
> Content-Length: 45360
> Connection: close
> Expect-CT: max-age=0, report-uri="
> ETag: "314b65190a8968893c6c400f29b13369"
> Cache-Control: max-age=126195
> Expires: Wed, 13 Mar 2019 10:26:43 GMT
> Access-Control-Allow-Origin: *
> X-Cache: MISS from trogdor.openstreetmap.org
> X-Cache-Lookup: HIT from trogdor.openstreetmap.org:3128
> Via: 1.1 trogdor.openstreetmap.org:3128 (squid/2.7.STABLE9)
> Set-Cookie: qos_token=031042; Max-Age=3600; Domain=openstreetmap.org; Path=/
> Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
> is it possible to modify the Cache-Control and Expires header before the
> response is written to disk?
No. Cache stores the original response as got from the upstream
You can, however, return different headers to clients, using the
"proxy_hide_header", "add_header", and "expires" directives. In
case of Cache-Control and Expires, just "expires" as already
present in your configuration should be enough.
> The problem is: the cached tiles on disk do not have "Cache-Control:
> max-age=2592000" but "Cache-Control: max-age=126195" regardless of setting
> proxy_ignore_headers "Cache-Control".
> I assumed that setting proxy_ignore_headers "Cache-Control"; and "expires
> 30d;" will remove the header from the response and write the corresponding
> "Cache-Control" and "Expires" with the 30d.
Well, your assumption is not correct. The "proxy_ignore_headers"
directive controls if nginx itself will respect Cache-Control or
not when caching a response. And the "expires" directive controls
what will be returned to clients.
>From practical point of view, however, these should be enough to
return correct responses to clients. What is stored in the cache
file is irrelevant.
More information about the nginx