Я хотел использовать nginx для переключения между серверами, когда код ошибки 500 отправляется как ответ вышестоящего сервера на запрос от клиента. Как это может быть сделано?
Использовать proxy_next_upstream в месте.
proxy_next_upstream http_500;
допустимые варианты: error | timeout | invalid_header | http_500 | http_502 | http_503 | http_404 и т. д. Можно комбинировать, используя пробел в качестве разделителя:
proxy_next_upstream timeout error http_500 <etc>;