If you are having same technical stack almost everywhere, then having a virtual machine per application sounds like would bring too much overhead. You would not only have extra kernel running, but MySQL, Apache/nginx and PHP. What I would suggest instead, is having separate virtual machine for MySQL server. You can dedicate most RAM to it if you applications are database heavy.
For apache/nginx & PHP I would have separate VMs for different versions/configurations of PHP, so for example if you have some legacy applications which need PHP 5.3<= or PHP4 even, you can have a separate VM for them. If all your applications can be run on same versions and configurations of PHP, then I would just use apache/nginx vhosts to virtualize them. If you setup multiple VMs (e.g. for different PHP configurations or versions) it will be easier to maintain servers.
Keep in mind that if you setup multiple apache/web VMs, you will need a separate public IP per different VM to access it from outside of the world. To overcome this (if you want to go separate VM route), you will have to setup an httpd proxy on either one of the VMs or on a separate VM. This would generally be nginx
, then you can only need 1 public IP on this VM and then you will proxy all requests to other VMs on internal network.