Remove Item from Cart simply doesn’t work

for some reason the Remove Item from Cart simply doesn’t work i.e. /shopping-cart?remove_item=xxxxxxxxxxxx

Any ideas on that one? I’m sure it’s either W3TC or Nginx related as it previously worked

@martin-cooney-2 can you please paste nginx config so we can debug?

If you are using nginx’s fastcgi-cache try this http://rtcamp.com/tutorials/wordpress/woocommerce/

If you are using W3TC, try this -http://docs.woothemes.com/document/configuring-caching-plugins/

Thank you, I’ve integrated info from those articles already.
My site config is:

server {  
	server_name geekandjock.com www.geekandjock.com;  
	listen 80;  
	root /home/geekandjock/public_html;  
	index index.php;  
	access_log /var/log/virtualmin/geekandjock.com_access_log;  
	error_log /var/log/virtualmin/geekandjock.com_error_log;  

#BEGIN Yoast Sitemap Mods  
rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last;  
rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;  
#END Yoast Sitemap Mods  

#BEGIN WooCommerce Rules  
if ($request_uri ~* "/store.*|/cart.*|/my-account.*|/checkout.*|/addons.*") {  
         set $skip_cache 1;  
}  

if ( $arg_add-to-cart != "" ) {   
      set $skip_cache 1;  
}  

if ( $cookie_woocommerce_items_in_cart != "0" ) {	  
	set $skip_cache 1;  
}  
#END WooCommerce Rules  

# BEGIN W3TC Minify cache  
location ~ /wp-content/cache/minify.*\.js$ {  
    types {}  
    default_type application/x-javascript;  
    expires modified 31536000s;  
    add_header X-Powered-By "W3 Total Cache/0.9.3";  
    add_header Vary "Accept-Encoding";  
    add_header Pragma "public";  
    add_header Cache-Control "max-age=31536000, public";  
}  
location ~ /wp-content/cache/minify.*\.css$ {  
    types {}  
    default_type text/css;  
    expires modified 31536000s;  
    add_header X-Powered-By "W3 Total Cache/0.9.3";  
    add_header Vary "Accept-Encoding";  
    add_header Pragma "public";  
    add_header Cache-Control "max-age=31536000, public";  
}  
location ~ /wp-content/cache/minify.*js\.gzip$ {  
    gzip off;  
    types {}  
    default_type application/x-javascript;  
    expires modified 31536000s;  
    add_header X-Powered-By "W3 Total Cache/0.9.3";  
    add_header Vary "Accept-Encoding";  
    add_header Pragma "public";  
    add_header Cache-Control "max-age=31536000, public";  
    add_header Content-Encoding gzip;  
}  
location ~ /wp-content/cache/minify.*css\.gzip$ {  
    gzip off;  
    types {}  
    default_type text/css;  
    expires modified 31536000s;  
    add_header X-Powered-By "W3 Total Cache/0.9.3";  
    add_header Vary "Accept-Encoding";  
    add_header Pragma "public";  
    add_header Cache-Control "max-age=31536000, public";  
    add_header Content-Encoding gzip;  
}  
# END W3TC Minify cache  
# BEGIN W3TC Page Cache cache  
location ~ /wp-content/cache/page_enhanced.*html$ {  
    expires modified 3600s;  
    add_header X-Powered-By "W3 Total Cache/0.9.3";  
    add_header Vary "Accept-Encoding, Cookie";  
    add_header Pragma "public";  
    add_header Cache-Control "max-age=3600, public";  
}  
location ~ /wp-content/cache/page_enhanced.*gzip$ {  
    gzip off;  
    types {}  
    default_type text/html;  
    expires modified 3600s;  
    add_header X-Powered-By "W3 Total Cache/0.9.3";  
    add_header Vary "Accept-Encoding, Cookie";  
    add_header Pragma "public";  
    add_header Cache-Control "max-age=3600, public";  
    add_header Content-Encoding gzip;  
}  
# END W3TC Page Cache cache  
# BEGIN W3TC Browser Cache  
gzip on;  
gzip_types text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;  
location ~ \.(css|htc|js|js2|js3|js4)$ {  
    expires 31536000s;  
    add_header Pragma "public";  
    add_header Cache-Control "max-age=31536000, public";  
    add_header X-Powered-By "W3 Total Cache/0.9.3";  
}  
location ~ \.(html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml)$ {  
    expires 3600s;  
    add_header Pragma "public";  
    add_header Cache-Control "max-age=3600, public";  
    add_header X-Powered-By "W3 Total Cache/0.9.3";  
}  
location ~ \.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$ {  
    expires 31536000s;  
    add_header Pragma "public";  
    add_header Cache-Control "max-age=31536000, public";  
    add_header X-Powered-By "W3 Total Cache/0.9.3";  
}  
# END W3TC Browser Cache  
# BEGIN W3TC Minify core  
rewrite ^/wp-content/cache/minify.*/w3tc_rewrite_test$ /wp-content/plugins/w3-total-cache/pub/minify.php?w3tc_rewrite_test=1 last;  
set $w3tc_enc "";  
if ($http_accept_encoding ~ gzip) {  
    set $w3tc_enc .gzip;  
}  
if (-f $request_filename$w3tc_enc) {  
    rewrite (.*) $1$w3tc_enc break;  
}  
rewrite ^/wp-content/cache/minify/(.+/[X]+\.css)$ /wp-content/plugins/w3-total-cache/pub/minify.php?test_file=$1 last;  
rewrite ^/wp-content/cache/minify/(.+\.(css|js))$ /wp-content/plugins/w3-total-cache/pub/minify.php?file=$1 last;  
# END W3TC Minify core  
# BEGIN W3TC Page Cache core  
set $w3tc_rewrite 1;  
if ($request_method = POST) {  
    set $w3tc_rewrite 0;  
}  
if ($query_string != "") {  
    set $w3tc_rewrite 0;  
}  
if ($http_cookie ~* "(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle)") {  
    set $w3tc_rewrite 0;  
}  
if ($http_user_agent ~* "(W3\ Total\ Cache/0\.9\.3)") {  
    set $w3tc_rewrite 0;  
}  
set $w3tc_enc "";  
if ($http_accept_encoding ~ gzip) {  
    set $w3tc_enc _gzip;  
}  
if (!-f "$document_root/wp-content/cache/page_enhanced/$http_host/$request_uri/_index.html$w3tc_enc") {  
  set $w3tc_rewrite 0;  
}  
if ($w3tc_rewrite = 1) {  
    rewrite .* "/wp-content/cache/page_enhanced/$http_host/$request_uri/_index.html$w3tc_enc" last;  
}  
# END W3TC Page Cache core  

	set $skip_cache 0;  

	# POST requests and urls with a query string should always go to PHP  
	if ($request_method = POST) {  
		set $skip_cache 1;  
	}     
	if ($query_string != "") {  
		set $skip_cache 1;  
	}     

	# Don't cache uris containing the following segments  
	if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|lost-password|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 $skip_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 $skip_cache 1;  
	}  

        location / {  
                try_files $uri /index.php;  
        }  

	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)$ {  
		access_log off;	log_not_found off; expires max;  
	}  

	location ~ \.php$ {  
		include fastcgi_params;  
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
                fastcgi_pass unix:/var/run/php5-fpm.sock;  
	}  
}  

and the nginx conf is:

pid /run/nginx.pid;  

worker_processes  1;  

events {  
	worker_connections 768;  
	# multi_accept on;  
}  

http {  

	##  
	# Basic Settings  
	##  

	sendfile on;  
	tcp_nopush on;  
	tcp_nodelay on;  
	keepalive_timeout 30;  
	types_hash_max_size 2048;  
	# server_tokens off;  

	# server_names_hash_bucket_size 64;  
	# server_name_in_redirect off;  

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

	##  
	# Logging Settings  
	##  

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

	##  
	# Gzip Settings  
	##  

	gzip on;  
	gzip_disable "msie6";  

	# gzip_vary on;  
	# gzip_proxied any;  
	# gzip_comp_level 6;  
	# gzip_buffers 16 8k;  
	# gzip_http_version 1.1;  
	# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;  

	##  
	# nginx-naxsi config  
	##  
	# Uncomment it if you installed nginx-naxsi  
	##  

	#include /etc/nginx/naxsi_core.rules;  

	##  
	# nginx-passenger config  
	##  
	# Uncomment it if you installed nginx-passenger  
	##  
	  
	#passenger_root /usr;  
	#passenger_ruby /usr/bin/ruby;  

	##  
	# Virtual Host Configs  
	##  

	include /etc/nginx/conf.d/*.conf;  
	include /etc/nginx/sites-enabled/*;  
	server_names_hash_bucket_size 128;  
}  
user www-data;  

#mail {  
#	# See sample authentication script at:  
#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript  
#   
#	# auth_http localhost/auth.php;  
#	# pop3_capabilities "TOP" "USER";  
#	# imap_capabilities "IMAP4rev1" "UIDPLUS";  
#   
#	server {  
#		listen     localhost:110;  
#		protocol   pop3;  
#		proxy      on;  
#	}  
#   
#	server {  
#		listen     localhost:143;  
#		protocol   imap;  
#		proxy      on;  
#	}  
#}  

Any suggestions or performance improvements would be really appreciated.
Thanks again
Martin

Actually anything with a ? in the URL doesn’t work.
Such as this remove product, a preview post (http://www.geekandjock.com/?p=21736&preview=true) or even the BuddyPress regiastration confirmation which contains the authorisation key behind a question mark.

So either W3TC or Nginx is disallowing the functionality, for some reason.

Thoughts?

Thanks for sharing your configuration but looks like you are not using our config.

Please check - http://rtcamp.com/wordpress-nginx/tutorials/ and use a config which meets your need.

Your config has too many unwanted lines. Once you switched to our config, we will be able to provide you support (in case you run into issues afterwards).

Sorry but its not practically possible for me to debug every nginx-configuration style out there.

That is the reason we follow certain conventions to make life easy - http://rtcamp.com/wordpress-nginx/tutorials/conventions/