Como complemento à já excelente resposta do @gravity, você deve se lembrar que o DNS (ou, neste caso, o seu hosts
file, que serve ao mesmo propósito) mapeia apenas um nome para um endereço IP - mas não há um limite de IP inerente nesses mapeamentos de nome para ip. O exemplo do @ grawity de um número de telefone (IP) ser capaz de alcançar pessoas diferentes (nomes / programas) é um bom exemplo.
Se houvesse uma regra de mapeamento em que um único IP pudesse ser usado apenas uma vez, você não poderia executar vários serviços (mesmo de tipos diferentes) fora do mesmo IP, o que seria uma limitação técnica grave. Você precisaria de IPs separados (e prováveis servidores) para HTTP, DNS, email, etc. e todos os subdomínios ( www.example.com é um subdomínio de exemplo .com , por exemplo, e exigiria um IP separado de example.com ).
Como não há esse limite nesses mapeamentos, os programas normalmente entram em contato com um servidor em portas diferentes para separar o tráfego. Observe que as portas não estão incluídas nas entradas DNS (ou no seu arquivo hosts
) - cabe a partes individuais do software decidir quais portas elas devem usar para se comunicar. Se várias solicitações de nomes diferentes forem recebidas em uma única (porta 80 ou 443 para o tráfego normal da web), será então o servidor (que reside em 127.0.0.1 no seu caso) a decidir o que deve fazer, por exemplo. se receber uma solicitação para php.localhost
ou py.localhost
.
É aqui que a hospedagem virtual é baseada em nomes (tecnicamente Indicação do nome do servidor [SNI] para HTTPS). O arquivo de hosts virtuais contém as instruções para o Apache que dizem" Se obtivermos uma solicitação para este nome de host, faça X. " Se não houver um nome que corresponda, o servidor normalmente retorna um código de status HTTP 404 (Not Found). Se houver, a entrada do host virtual informa ao servidor como proceder (servir páginas desse diretório, etc.).
Observe que sua entrada ServerName localhost
em httpd.conf
é um host padrão. Às vezes, esse host é servido em vez de retornar um 404, se nenhum nome de host correspondente for encontrado em seu arquivo de hosts virtuais.