Por favor, note que eu tenho uma solução básica sugerida no final desta resposta.
O HTTP usa o TCP por padrão, e enquanto o UDP suporta vários programas vinculados a uma única porta, o TCP geralmente não. Portanto, a porta 80 parece não estar livre para um determinado IP nesta instância, pois provavelmente há apenas um programa usando a porta 80 (TCP) com esse IP por vez na máquina local.
Em relação a IPs de loopback separados, lembre-se de que o netblock inteiro 127.x.x.x está reservado para o loopback local. Portanto, 127.0.0.1 refere-se ao mesmo computador (ou seja, localhost) que 127.0.0.2 (ou 127.0.0.3 ou 127.127.127.127, etc.). E como você está usando o endereço de loopback 127.x.x.x em vez de IPs "reais" (ou seja, aqueles que identificam NICs reais ou virtuais separadas), a porta 80 com um determinado IP já pode estar em uso por outro aplicativo quando você inicia o segundo.
E sim, enquanto você pode ter o Apache fazendo hospedagem virtual com IPs de loopback local (isto é, 127.0.0.1 e 127.0.0.2 podem retornar páginas diferentes), o processo do Apache ainda está amarrado à porta 80 ( TCP) globalmente por padrão.
Weird thing is, if I start Apache first, it launches with no problem, and then I can even start node.js all with same configuration above and they both work fine.
Não tenho certeza do que "work [ing] fine" está fazendo referência aqui, mas depois de iniciar o Apache, em seguida, tentar iniciar o servidor http do Node.js na porta 80 ( npm install http-server -g ), recebi um erro, mesmo que um endereço como 127.0.0.4 fosse especificado.
Nomeuarquivodeconfiguração,tivequetercertezadequeoApacheestavaescutandoespecificamenteem127.0.0.1:80eohttp-serverestavaescutandoem127.0.0.4:80.Seacabeideouviro80noApache,oservidorhttpfalhou.OApacheserecusandoainiciarécompletamentenormal,tantoparaopróprioApachequantoemtermosdoprincípiodeapenasumacombinaçãoTCPIP/portaporprocesso.
Solução
AsoluçãofácilparaesseproblemaéexecutarváriasNICsnamesmamáquina(cadaumacomseupróprioIPexclusivo).Dessaforma,cadaNICpodetersuaprópriaporta80(IP+port=endereçodedestinocompleto).Outrapossibilidadeétentar"interfaces virtuais" para o NIC (para que você possa fornecer dois IPs "virtuais" para o mesmo NIC).