This solution should apply to Drupal sites that uses Nginx as web server with PHP FPM and the Nginx configuration is based on perusio's Nginx configuration for running Drupal.
If we investigate the
fastcgi_drupal.conf file, the first line contains:
fastcgi_param QUERY_STRING q=$uri&$args;
Yes, this is true for Drupal if we rewrite the clean URL to its original format. But after some debugging, I found out this is the cause of the Drupal batch update/process fails with access denied issue.
The Nginx configuration line above should be changed to:
fastcgi_param QUERY_STRING $query_string;
The replacement Nginx configuration line above is tested to be working on Drupal sites.