Апач умеет слушать сразу несколько портов и для каждого порта можно указать свой виртуальный хост, то есть да - на одном айпи несколько сайтов на разных портах.
Для nginx не подскажу, конечно можно поднять несколько nginx-ов на разных портах =), но если он так не умеет, лучше апач.
Listen 123
Listen 321
Listen 80
# Listen for virtual host requests on all IP addresses
NameVirtualHost *:123
<VirtualHost *:123>
DocumentRoot /var/www/site1
ServerName www.site1.com
</VirtualHost>
NameVirtualHost *:321
<VirtualHost *:321>
DocumentRoot /var/site2
ServerName www.site2.org
</VirtualHost>
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /var/site3
ServerName www.site3.org
</VirtualHost>