Welcome! Log In Create A New Profile

Advanced

Re: Honoring ETag of cached content

Marc Aymerich
November 01, 2013 09:56PM
On Sat, Nov 2, 2013 at 12:16 AM, Maxim Dounin <mdounin@mdounin.ru> wrote:

> Hello!
>
> On Fri, Nov 01, 2013 at 10:29:06PM +0100, Marc Aymerich wrote:
>
> > Hi,
> > I'm using nginx proxy pass to cache content of our dynamic web
> application.
> >
> > In order to save some bandwidth our client application uses conditional
> > requests based on ETag. However nginx ignores the ETag of cached pages :(
> >
> > What would be required if I want to honor the ETag of cached pages? Is
> > something that can be achieve by means of configuration? or I would need
> to
> > write an nginx module in C?
>
> It is expected to just work in 1.3.3+. If you don't see it
> working, you may want to check the version you are running.


Hi maxim,
yeap I'm running 1.4.1 but I never get a 304 :(
This is what a response from cache looks like

# wget --no-check https://[fdf5:5351:1dfd:0:0:0:0:2]/api/ -S --header
'If-None-Match: "83393a3900e4abce27212d7a27cae589"' -q
HTTP/1.1 200 OK
Server: nginx/1.4.1
Date: Sat, 02 Nov 2013 01:40:24 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
ETag: "83393a3900e4abce27212d7a27cae589"
Allow: GET, HEAD, OPTIONS
Vary: Accept, Cookie, Accept-Encoding
Expires: Sat, 02 Nov 2013 01:41:24 GMT
Cache-Control: max-age=60

This is my nginx config for this cached location

location /api/ {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;

proxy_ignore_headers Set-Cookie;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Protocol $scheme;

proxy_cache cache;
proxy_cache_key
$host$uri$is_args$args$http_accept_encoding$http_accept;
proxy_cache_valid 1m;
expires 1m;

set $skip_cache 0;
if ($request_method != GET) {
set $skip_cache 1;
}
if ($http_cookie) {
set $skip_cache 1;
}
if ($http_authorization) {
set $skip_cache 1;
}
proxy_cache_bypass $skip_cache;
}


Maybe is there some conflicting configuration? I can not see it :( and
ETags work just fine if I request to my backend server

# wget --no-check http://127.0.0.1:8080/api/ -S --header 'If-None-Match:
"77e348fb6260a8dd90ca18c61f7cd472"' -q
HTTP/1.1 304 NOT MODIFIED
Server: nginx/1.4.1
Date: Sat, 02 Nov 2013 01:47:30 GMT
Content-Length: 0
Connection: keep-alive

Notice the etag value from cached content is different from the fresh one,
even though the content is exactly the same, I presume this is nginx doing
its job of updating the ETag for some differences because of caching, but
still fails to reply a conditional request properly :(

Thanks for your help!!
--
Marc
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx
Subject Author Posted

Honoring ETag of cached content

Marc Aymerich November 01, 2013 05:30PM

Re: Honoring ETag of cached content

Maxim Dounin November 01, 2013 07:18PM

Re: Honoring ETag of cached content

Marc Aymerich November 01, 2013 09:56PM

Re: Honoring ETag of cached content

Maxim Dounin November 02, 2013 08:12AM

Re: Honoring ETag of cached content

Marc Aymerich November 02, 2013 10:58AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 72
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready