NodeJS e Apache na porta 80 usando diferentes endereços IP - O Apache precisa da porta 80 clara, embora esteja configurada para usar a porta 80 de um IP diferente

1

Estou usando um aplicativo node.js na porta 80 de 127.0.0.2:80

server.listen(80, '127.0.0.2', function() {...

E eu quero usar o Apache na porta 80 do outro endereço IP, digamos 127.0.0.3:80 , então eu tenho isso no meu httpd.conf

Listen 127.0.0.3:80
ServerName 127.0.0.3:80

Mas isso me dá o erro

Apache port (80) is already used by another application!

Por que o Apache se preocupa com uma porta aleatória 80, independentemente de qual porta 80 do IP ela mesma está programada para ouvir? No que diz respeito à porta 80, o 127.0.0.3:80 ainda está livre.

Eu já fui em frente e tentei isso com outras séries IP (192.xxx, 122.xxx), mas o Apache quer a porta 80 livre, ponto final.

O mais estranho é que, se eu iniciar o Apache primeiro, ele é iniciado sem nenhum problema, e então eu posso até mesmo iniciar o node.js com a mesma configuração acima e ambos funcionam bem. Mas o precioso Apache, por algum motivo, não gosta de ninguém escutando na porta 80 de qualquer endereço IP antes que sua alteza tenha tido a chance de começar primeiro.

Estou entendendo mal as coisas que, se um aplicativo estiver escutando em 127.0.0.2:80 , somente a porta 80 desse IP deve estar ocupada, a porta 80 de outro IP ainda deve estar livre 127.0.0.3:80 ? Ou é o Apache que está se comportando mal?

    
por laggingreflex 09.09.2014 / 03:28

1 resposta

2

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).

link

    
por 09.09.2014 / 07:25