dans le cadre très précis des serveurs web, il existe une alternative ...
En gros, au lieu de faire le routage de traffic au niveau 3-4 (IP-TCP), tu le fais au niveau 7 (Applicatif, ici HTTP)
Je m'explique. Mettons que l'adresse publique de ton serveur est X, l'adresse interne de ta machine virtuelle avec Apache est Y et celle de ta machine virtuelle avec Tomcat est Z
Au lieu de dire que X:80 est redirigé sur Y:80 et que X:8080 est redirigé sur Z:8080 (ou Z:80 d'ailleurs on s'en fout ... )
Tu montes un serveur web sur ta machine réelle.
Il te faudra ensuite (si c'est possible, là je sais pas ... ) deux noms de domain différents, mettons :
web.tondomaine.net et tomcat.tondomaine.net, tous les deux pointant vers X
Sur ton serveur web de ta machine réelle, tu fais deux serveurs virtuels (très facile avec apache) qui sont en fait ce que l'on appele des reverse-proxy.
Tout ce qui arrivera sur le port 80 mais avec comme entête http (le nom du serveur que l'on veut joindre) web.tondomaine.net sera redirigé sur Y et tout ce qui concerne tomcat.tondomaine.net sera redirigé sur Z