We have a lot of IP addresses so up to this point we have exposed every external service on its own IP, but it is a pain to manage all of these at the firewall level. What is the best tool to expose to an external IP address and have it reverse proxy these requests to different services? Some of these services include static websites, dynamic web apps, and FTP access.
I'd suggest some form of load-balancer/reverse-proxy - that's really all anyone does for this.
There's a million to choose from, we use Cisco ACE's and Riverbed Stingrays, others use F5 kit, Brocade all the way down to free stuff like Squid and the like. Either way that's the kind of thing you want.
You can use a firewall for this but I personally prefer to let my FWs just do their job and have my LBs behind them - your mileage may vary.