Thank you for the insights Francis!!
It's too early to tell, but I think moving the "if" statement outside the location block may have done the trick. I also changed the the statement so that only GET requests are cached like so:
if ($request_method != GET) {
set $skip_cache 1;
}
I haven't pinpointed the exact cause yet, but initial test results are promising. I set up three times as many keyword monitors and have not seen an empty cached page yet after deleting the existing cached page and letting the cached page rebuild. Only the complete page is being cached. Before this change it was pretty easy for me to break the cache, but now I've been unable to replicate the problem. My theory is that the monitors are making some sort of non-GET (but not HEAD) requests which NGINX is for some reason treating as GET. So hopefully moving the if statement and changing the logic will be the solution here.
If anyone else is able to confirm the exact issue, I'd still really like to know.
Oh and another possible effect of these changes...page load time has decreased by at least 300 milliseconds!
Thanks again!!