weird caching behaviour

Dipl.-Ing. Juergen Ladstaetter office at tecserver.com
Tue Feb 21 14:27:51 UTC 2012


Hi guys,

we're running a load balanced cluster with nginx as load balancing software
and use the caching feature. So far we're caching for 3 high frequent sites
and it's working great.
Now when I add another site to be cached (configuration is below) nginx
starts to cache EVERY website that it's loadbalancing. Can you find an error
in the configuration or tell me why it's doing this? Thanks in advance.

Nginx.conf:
user nginx nginx;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;

error_log /var/log/nginx/error_log info;

events {
	worker_connections 1024;
	use epoll;
}

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

	# standard logging
	log_format main
		'$remote_addr - $remote_user [$time_local] '
		'"$request" $status $bytes_sent '
		'"$http_referer" "$http_user_agent" '
		'"$gzip_ratio"';

	# cache logging
        log_format cache '$remote_addr - $remote_user [$time_local] -
$http_referer - '
                     '$upstream_cache_status '
                     'Cache-Control: $upstream_http_cache_control '
                     'Expires: $upstream_http_expires '
                     '"$request" ($status) '
                     '"$http_user_agent" ';
        access_log  /var/log/nginx/cache.log cache;

	client_header_timeout	10m;
	client_body_timeout	10m;
	send_timeout		10m;

	connection_pool_size 		256;
	client_header_buffer_size 	1k;
	large_client_header_buffers 	4 8k;
	request_pool_size 		4k;
	client_max_body_size		100M;

	gzip 		on;
	gzip_min_length 1100;
	gzip_buffers 	4 8k;
	gzip_types 	text/plain;

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;

	keepalive_timeout 75 20;
	proxy_read_timeout 180s;
	ignore_invalid_headers on;

	index index.html;

	# buffering proxy off (fake speed improvement)
	proxy_buffering off;
	proxy_buffer_size 128k;
	proxy_buffers 4 256k;

	# definition of the load balancing nodes
	upstream backend {
        	ip_hash;
	        server SYS_SERVER1:80;
		server SYS_SERVER2:80;
	}

	# set a general temp path 
	proxy_temp_path                 /tmp/cache/tmp;

	# include all vhosts
	include sites-enabled/*;
}

Default vhost without caching that catches all non-specific requests:
	# standard load balancer
	server {
		listen 		SYSserver:80;
		server_name	_;

                # status
                location /nginx_status {
                        stub_status on;
                        access_log off;
                        allow all;
                        #deny all;
                }

		location / {
			proxy_pass			http://backend;
			proxy_buffering			off;
			proxy_redirect			off;
			proxy_set_header		Host
$host;
			proxy_set_header		X-Real-IP
$remote_addr;
			proxy_set_header		X-Forwarded-For
$proxy_add_x_forwarded_for;
		}
	}

A Vhost that has caching enabled and working:
	# definition about the cache
	proxy_cache_path                /tmp/cache/siteA levels=1:2
keys_zone=siteA:10m max_size=1g inactive=1h;

	# listener
	server {
		listen 		SYSserver:80;
		server_name	www.sitea.com;

		location / {
			proxy_pass			http://backend;

			proxy_buffering 		on;
			proxy_cache                     siteA;
                        proxy_cache_valid               200 10m;
                        proxy_cache_use_stale           error timeout
invalid_header updating http_500 http_502 http_503 http_504;
                        proxy_cache_key
"$scheme$host$request_uri$cookie_user";

			proxy_redirect			off;
			proxy_set_header		Host
$host;
			proxy_set_header		X-Real-IP
$remote_addr;
			proxy_set_header		X-Forwarded-For
$proxy_add_x_forwarded_for;
		}
	}

If we add the following vhost to be cached too, the whole system gets cached
which shouldn't be:
	# definition about the cache
	proxy_cache_path                /tmp/cache/felix levels=1:2
keys_zone=felix:10m max_size=1g inactive=1h;

	# felix listener
	server {
		listen 		CONserver:80;
		server_name	www.siteb.com;

		location / {
			proxy_pass			http://backend;

			proxy_buffering 		on;
			proxy_cache                     felix;
                        proxy_cache_valid               200 10m;
                        proxy_cache_use_stale           error timeout
invalid_header updating http_500 http_502 http_503 http_504;
                        proxy_cache_key
"$scheme$host$request_uri$cookie_user";

			proxy_redirect			off;
			proxy_set_header		Host
$host;
			proxy_set_header		X-Real-IP
$remote_addr;
			proxy_set_header		X-Forwarded-For
$proxy_add_x_forwarded_for;
		}
	}


If you see anything that is wrong or could be configured better, please let
me know. This weird caching faulty behaviour is confusing me since nginx
won't tell me any error.

Thanks in advance! Juergen



More information about the nginx mailing list