Hello Jeffrey K,
On Fri, Feb 27, 2015 at 09:16:27AM +0100, Jeffrey K. wrote:
> I’m experiencing an issue that cached 404 responses are revalidated when the
> requested file are available again on the backend server with an older time
> stamp. Hereby the details of my issue.
>
>
>
> Nginx version/build details
>
> # nginx -V
> nginx version: nginx/1.7.10
> built by gcc 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
> TLS SNI support enabled
> configure arguments: --prefix=/usr/share/nginx
> --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf
> --error-log-path=/var/log/nginx/error.log
> --http-client-body-temp-path=/var/lib/nginx/body
> --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/tmp
> --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid
> --without-http_fastcgi_module --without-http_uwsgi_module
> --without-http_scgi_module --with-http_flv_module --with-http_geoip_module
> --with-http_gzip_static_module --with-http_mp4_module
> --with-http_realip_module --with-http_secure_link_module
> --with-http_stub_status_module --with-http_ssl_module --with-ipv6
> --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl
> --with-aio_module --with-file-aio --with-http_spdy_module --with-debug
>
>
> vhost is configured with
>
> server {
> listen 80;
>
> server_name test.domain.tld;
> set $origin backend.domain.tld;
>
> expires off;
>
> location /
> {
> client_max_body_size 0;
> client_body_buffer_size 8k;
> proxy_connect_timeout 60;
> proxy_send_timeout 60;
> proxy_read_timeout 60;
> proxy_buffer_size 16k;
> proxy_buffers 256 16k;
> proxy_buffering on;
> proxy_max_temp_file_size 1m;
> proxy_ignore_client_abort on;
> proxy_intercept_errors on;
> proxy_next_upstream error timeout invalid_header;
>
> proxy_cache one;
> proxy_cache_min_uses 1;
> proxy_cache_lock off;
> proxy_cache_lock_timeout 5s;
>
> proxy_cache_valid 200 302 301 1m;
> proxy_cache_valid 404 5s;
> proxy_cache_revalidate on;
>
> proxy_set_header Host $origin;
> proxy_pass_header Set-Cookie;
>
> proxy_set_header Range "";
> proxy_set_header Request-Range "";
> proxy_set_header If-Range "";
>
> proxy_cache_key "$scheme://$host$uri";
> proxy_pass http://$origin$uri;
> proxy_redirect off;
> }
> }
>
>
>
>
> Log format used
>
>
> ¦$bytes_sent¦$remote_addr¦$msec¦$status¦$http_referer¦$http_user_agent¦$request_time¦$request_method
> $request_uri
> $server_protocol¦$server_port¦$upstream_cache_status¦$upstream_status¦$upstream_response_time¦$request_completion¦$backend_server¦
>
>
>
> Requesting non-existen file. 404 will be cached for 5 second
> after 5 seconds its expires, file is fetched from backend that gives 404 again
>
> ¦469¦[remote.ip.addr]¦1424963103.586¦404¦-¦curl/7.35.0¦0.027¦GET
> /pica.jpg HTTP/1.1¦80¦MISS¦404¦0.027¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963104.605¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963108.679¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963109.724¦404¦-¦curl/7.35.0¦0.027¦GET
> /pica.jpg HTTP/1.1¦80¦EXPIRED¦404¦0.027¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963110.742¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963114.815¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963115.860¦404¦-¦curl/7.35.0¦0.027¦GET
> /pica.jpg HTTP/1.1¦80¦EXPIRED¦404¦0.027¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963116.879¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963120.952¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
>
>
> [Placed file on backend server (move), file has timestamp of year 2013]
> 404 expires, file is fetched from backend and cached
>
> ¦49166¦[remote.ip.addr]¦1424963122.033¦200¦-¦curl/7.35.0¦0.063¦GET
> /pica.jpg HTTP/1.1¦80¦EXPIRED¦200¦0.063¦OK¦[backend.server]¦
> ¦49162¦[remote.ip.addr]¦1424963123.037¦200¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦49162¦[remote.ip.addr]¦1424963181.036¦200¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
>
>
> File expires, revalidation is send to backend and cached file is updated
>
> ¦49170¦[remote.ip.addr]¦1424963182.081¦200¦-¦curl/7.35.0¦0.027¦GET
> /pica.jpg HTTP/1.1¦80¦REVALIDATED¦304¦0.027¦OK¦[backend.server]¦
> ¦49162¦[remote.ip.addr]¦1424963183.098¦200¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦49162¦[remote.ip.addr]¦1424963242.103¦200¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
>
>
> [File is removed from backend]
> File expires, file is fetched from backend that gives 404
>
> ¦469¦[remote.ip.addr]¦1424963243.148¦404¦-¦curl/7.35.0¦0.027¦GET
> /pica.jpg HTTP/1.1¦80¦EXPIRED¦404¦0.027¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963244.167¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963248.240¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963249.285¦404¦-¦curl/7.35.0¦0.027¦GET
> /pica.jpg HTTP/1.1¦80¦EXPIRED¦404¦0.027¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963250.304¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963254.376¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
>
>
> [Placed file back on backend server (move), file has timestamp of year 2013]
> 404 expires, revalidation is done, because times stamp of file is older then
> time the 404 was fetched/cached it revalidates??
> - bug? it should not revalidate 404, just expire and fetch actual file!
>
> ¦469¦[remote.ip.addr]¦1424963255.421¦404¦-¦curl/7.35.0¦0.027¦GET
> /pica.jpg HTTP/1.1¦80¦REVALIDATED¦304¦0.027¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963256.439¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963260.514¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963261.559¦404¦-¦curl/7.35.0¦0.027¦GET
> /pica.jpg HTTP/1.1¦80¦REVALIDATED¦304¦0.027¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963262.577¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963266.650¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963267.697¦404¦-¦curl/7.35.0¦0.029¦GET
> /pica.jpg HTTP/1.1¦80¦REVALIDATED¦304¦0.029¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963268.715¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963272.788¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
>
>
> [File is removed from backend]
> Now the File expires, file is fetched from backend that gives 404 (probably
> because timestamp is newer?)
>
> ¦469¦[remote.ip.addr]¦1424963291.224¦404¦-¦curl/7.35.0¦0.027¦GET
> /pica.jpg HTTP/1.1¦80¦EXPIRED¦404¦0.027¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963292.242¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963296.315¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963297.360¦404¦-¦curl/7.35.0¦0.027¦GET
> /pica.jpg HTTP/1.1¦80¦EXPIRED¦404¦0.027¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963298.379¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
> ¦469¦[remote.ip.addr]¦1424963302.457¦404¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
>
>
> [Placed file back on backend server (copy), file has timestamp of current time
> 404 expires, revalidation is done??, because times stamp of file is newer
> then time the 404 was fetched/cached it actually fetches the file
>
> ¦49166¦[remote.ip.addr]¦1424963303.537¦200¦-¦curl/7.35.0¦0.059¦GET
> /pica.jpg HTTP/1.1¦80¦EXPIRED¦200¦0.059¦OK¦[backend.server]¦
> ¦49162¦[remote.ip.addr]¦1424963304.544¦200¦-¦curl/7.35.0¦0.000¦GET
> /pica.jpg HTTP/1.1¦80¦HIT¦-¦-¦OK¦[backend.server]¦
>
>
> Regards,
>
> Jeffrey K.
>
>
>
> _______________________________________________
> nginx-devel mailing list
> [email protected]
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
Thanks for your report.
We've just committed a fix for this.
--
Roman Arutyunyan
_______________________________________________
nginx-devel mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx-devel