As diretivas que você tentou são destinadas a coisas diferentes daquelas que você deseja. Leia a documentação deles.
A documentação da diretiva upstream
explica detalhadamente como funciona um bloco upstream:
If an error occurs during communication with a server, the request will be passed to the next server, and so on until all of the functioning servers will be tried. If a successful response could not be obtained from any of the servers, the client will receive the result of the communication with the last server.
Tudo dito lá.
No entanto, você pode processar o código de erro retornado do back-end interceptando-o com proxy_intercept_errors
e, em seguida, envie o $request_uri
para um script especial que lide com ele em seu nome do cliente original.
A linha de base é: você precisa de alguma lógica de código / aplicativo para repetir o lado do cliente (ou front-end).