Microcache : empty pages ?

Ronald Van Assche rva at onvaoo.com
Wed Aug 13 21:39:21 UTC 2014


I have somme strange comportement on nginx 1.7.4  / Freebsd 9 : Some Wordpress microcached pages rendered ..EMPTY HTML pages , for about 1/20 visitors .
When it happens, we have to make a forced reload of the page on the navigator (Firefox or others).

configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --with-ld-opt='-L /usr/local/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx-error.log --user=www --group=www --with-file-aio --with-ipv6 --http-client-body-temp-path=/var/tmp/nginx/client_body_temp --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp --http-proxy-temp-path=/var/tmp/nginx/proxy_temp --http-scgi-temp-path=/var/tmp/nginx/scgi_temp --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp --http-log-path=/var/log/nginx-access.log --add-module=/usr/ports/www/nginx-devel/work/ngx_cache_purge-2.1 --with-http_geoip_module --with-http_stub_status_module --with-pcre

sendfile(/cache/nginx/8/f2/fa48a21dcdf1f2a9ff3d8215b0ab4f28) returned busy again


nginx.conf

user  www;
worker_processes  4;
events {
	worker_connections  2048;
      multi_accept on;
}

http {
  include       mime.types;
  default_type  application/octet-stream;

  fastcgi_cache_path /cache/nginx levels=1:2 keys_zone=microcache:5m max_size=1000m;
  fastcgi_cache_key "$scheme$request_method$host$request_uri";

  log_format cache_log '$remote_addr - $remote_user [$time_local] "$request" ' '$status $upstream_cache_status $body_bytes_sent "$http_referer" ' '" $http_user_agent" "$http_x_forwarded_for"';

   sendfile on;
   sendfile_max_chunk 512K;
   aio sendfile;
   tcp_nopush on;
   read_ahead 256K;

   open_file_cache max=1000 inactive=20s;
   open_file_cache_valid 30s;
   open_file_cache_min_uses 2;
   open_file_cache_errors on;

  keepalive_timeout  120;
  keepalive_requests 10000;

  client_max_body_size 99M;

	 gzip  on;
	 gzip_buffers      48 8k;
	 gzip_comp_level   4;
	 gzip_http_version 1.0;
	 gzip_vary	on;
	 gzip_disable "MSIE [1-6]\.(?!.*SV1)";
	 gzip_proxied    any;
	 gzip_types    text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

	error_log /var/log/nginx/nginx.error.log;


   geoip_country  /usr/local/etc/nginx/geoip/GeoIP.dat; # the country IP database
   geoip_city     /usr/local/etc/nginx/geoip/GeoLiteCity.dat; # the city IP database


}



The config file for this site =

server {
      server_name  mobi.********.net  *******.mobi ****** net www.********.net  ;
#       listen       80 accept_filter=httpready sndbuf=32K ;

      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
          root   /usr/local/www/nginx-dist;
      }
      access_log  /var/log/nginx/******.access.log cache_log;
      error_log /var/log/nginx/******.error.log;
	location = /favicon.ico { access_log off; log_not_found  off; }
      location = /robots.txt {
              allow all;
              log_not_found off;
              access_log off;
      }
      location / {
              root   /home/www/api/wordpress;
              index  index.php index.html;
              rewrite ^/?feed/rss2$ /?feed=rss2 permanent;
              try_files $uri $uri/ /index.php;
       # this serves static files that exist without running other rewrite tests
        if (-f $request_filename) {
            expires 30d;
            break;
        }
        # this sends all non-existing file or directory requests to index.php
        if (!-e $request_filename) {
            rewrite ^(.+)$ /index.php?q=$1 last;
        }
      }
      location ~ \.php$ {

	set $no_cache '0';
     # If non GET/HEAD, don't cache & mark user as uncacheable for 1 second via cookie
     if ($request_method !~ ^(GET|HEAD)$) {
         set $no_cache '1';
     }
     # Drop no cache cookie if need be
     # (for some reason, add_header fails if included in prior if-block)
     if ($no_cache = '1') {
         add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/";
         add_header X-Microcachable "0";
     }
     # Bypass cache if no-cache cookie is set
     if ($http_cookie ~* "_mcnc") {
                 set $no_cache '1';
     }
	#   Bypass cache if Iphone
	if ($http_user_agent ~ (iPhone|Android) ) {
 		 set $no_cache '1';
	  }

	if ( $http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
		set $no_cache '1';
	}

	#Don't cache the following URLs
	if ($request_uri ~* "/(wp-admin/|wp-login.php)")
	{
		set $no_cache '1';
	}

   	# Bypass cache if flag is set
	if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { 
		set $no_cache "1";
	 }   


	# Don't use the cache for logged in users or recent commenters
	if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
		set $no_cache '1';
	}

	add_header X-Cache $upstream_cache_status;

       location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
               expires 7d;
       }

########

     fastcgi_no_cache $no_cache;
     fastcgi_cache_bypass $no_cache;
     fastcgi_cache microcache;
     fastcgi_cache_key $server_name|$request_uri;

     fastcgi_cache_valid   200 302  1h;
     fastcgi_cache_valid   301      1d;
     fastcgi_cache_min_uses  1;

     fastcgi_cache_use_stale updating error timeout invalid_header http_500;
     fastcgi_cache_bypass $http_pragma;
     fastcgi_pass_header Set-Cookie;
     fastcgi_pass_header Cookie;
     fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

	fastcgi_split_path_info ^(.+\.php)(/.+)$;
     #    fastcgi_split_path_info ^(.+\.php)(.*)$;
     fastcgi_pass   127.0.0.1:9000;
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  /home/www/api/wordpress/$fastcgi_script_name;
     fastcgi_param  QUERY_STRING     $query_string;
     fastcgi_param  REQUEST_METHOD   $request_method;
     fastcgi_param  CONTENT_TYPE     $content_type;
     fastcgi_param  CONTENT_LENGTH   $content_length;
     fastcgi_intercept_errors        on;
     fastcgi_ignore_client_abort     off;
     fastcgi_connect_timeout 120;
     fastcgi_send_timeout 300;
     fastcgi_read_timeout 300;
     fastcgi_buffer_size 128k;
     fastcgi_buffers 256 8k;
     fastcgi_busy_buffers_size 256k;
     # all replies that are greater than the FastCGI buffers and transfer data synchronously to the client set fastcgi_max_temp_file_size to 0 
     fastcgi_max_temp_file_size 0; 
     fastcgi_temp_file_write_size 1024k;
     include fastcgi_params;
     }


  }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20140813/54fb825e/attachment-0001.html>


More information about the nginx mailing list