Only your front end service, listening on 443, needs to be https, as it will handle decrypting of the client's request. When you proxy to other services, if they're internal/on your own network, there's no reason to use https on the back end (just adds a ton of performance overhead), however if they're on a public network or for some reason you want additional internal security, you can use https, however it will be a https handshake between your front end and the back end, *not* between the user's browser and the back end (this matters if you need to get at the user's https client certificates or something, you'd have to do that on your front end and forward appropriate information along).
As for how to do it, it's basically the same whether it's http or https. The simplest is probably going to be to use the
http-proxy module, the examples there should work whether you're using "http.createServer" or "https.createServer".
Note that if performance is of the utmost importance, you'll want to use a dedicated piece of software designed for this, such as NGINX, last I saw it was still significantly faster than a Node app for the specific task of https handshake + serve static files + proxy to other services. But, Node's still pretty darn fast, and it's likely other performance bottlenecks will far outweigh this difference, and it's nice to have everything in the same framework.
Hope this helps!
Jimb