Yes - remember that a 'redirect' will respond to the client browser with a 301 or 302 code and the new address to access. If the address is not publicly routable, it will fail because it is the browser requesting the redirect address, not the proxy server (nginx). To prove this out, if you set your nginx to redirect to http://www.yahoo.com, it would work beautifully.
Instead, you should use the proxy capabilities of nginx - this means nginx receives requests, passes them to the proxied servers, retrieves responses from them, and sends them to the clients.
The most basic implementation is to create a location directive within your server directive in the nginx configuration file:
location / {
proxy_pass http://10.0.0.5/;
}
This will pass all requests to the public IP on to private IP. Of course, there are numerous things you can do with request/response headers, resources, etc. A good starting point may be Setting Up a Simple Proxy Server. This link also has some more configuration options and is a good example.