Есть такая опция у nginx’а, fastcgi_intercept_errors. Она перехватывает ошибки fastcgi и преобразовыает их в ошибки nginx’а.
Сегодня около часа потратил на такую ситуацию. nginx + php-fpm. Конфиги адекватные, в барузере 500 Internal Server Error. В nginx/error.log пусто. В php-fpm/error.log пусто. Включил везде debug по-максимуму — в логах пусто. Всё перепроверил на 10 раз — без результата, ниче не работает, error 500. И тут чуйка подсказала зачем-то закомментить упомянутую выше опцию fastcgi_intercept_errors.
Сцуко, оказалось, php’шный фрэймворк (yii) выдавал свою высокоуровневую ошибку, что ему не хватает прав на запись в ./protected/runtime, а nginx её преобразовывал в error 50x.