O IIS 7.0 não liberará a porta 80 quando o serviço for interrompido. Não é possível executar o Apache na porta 80

6

Eu tenho duas máquinas de desenvolvimento, ambas executando o Windows 7 Professional.

A primeira máquina é usada alternadamente para servidores Web IIS 7.0 e Apache 2.2 (mas nunca ao mesmo tempo). Eu desligo o IIS, que libera a porta 80, depois inicio o Apache na porta 80. (ou vice-versa). Isso funciona bem.

Eu tenho uma segunda máquina de desenvolvimento na qual eu preciso fazer a mesma configuração. (projeto diferente para um cliente diferente). Mesmo quando o IIS está parado, a porta 80 ainda está em uso por um processo no nível do sistema.

Eu não consegui identificar a diferença que faz uma máquina funcionar e a outra falha. Alguém sabe por que a porta 80 não será liberada quando o IIS for interrompido?

    
por Mike 14.02.2012 / 18:10

1 resposta

9

Execute o seguinte comando:

netsh http show servicestate

Procure entradas semelhantes:

Registered URLs:
    HTTP://+:80/<SERVICE_NAME>

Isso informa o que você está ouvindo na porta 80.

Cuidado com o Skype também, que tem o péssimo hábito de pegar a porta 80.

Desde o Windows 2003, a Microsoft criou um driver http no modo kernel. Uma característica deste driver é o listener do modo kernel. O listener do modo kernel fornece um recurso chamado compartilhamento de porta, em que mais de um aplicativo pode escutar na mesma porta. Aplicativos que desejam fazer isso registram um namespace de URI para sua aplicação. Por exemplo, na minha máquina eu tenho o serviço do MS Deployment Agent ouvindo nesta URL:

http://+:80/MSDEPLOYAGENTSERVICE/

As solicitações para esse URI específico são transferidas para o aplicativo que registrou esse URI específico.

O IIS é outro aplicativo que se registrará com o serviço listener do modo kernel e suas várias ligações.

O problema com o Apache no Windows é que ele não usa o subsistema de modo de kernel HTTP do Windows e se registra (isso não é um detalhe, apenas um fato da vida). Seu próprio processo tenta se ligar diretamente a qualquer combinação de ip / porta que você configurou. É claro que se o serviço de ouvinte HTTP estiver sentado lá ouvindo os URI's registrados na porta 80 por outros serviços, ele será iniciado.

Então, basicamente, se você quiser usar a porta 80, eu acho que você precisa encontrar e matar tudo o que poderia estar ouvindo lá (se você fizer um Listen 80 ) no endereço IP que você deseja usar para o Apache.

Se necessário, pode ser necessário excluir os URIs registrados que não estão mais em uso e que talvez não tenham sido adequadamente limpos quando um aplicativo foi desinstalado.

A solução mais fácil, não ideal e tenho certeza de que você já sabe, pode ser configurar o Apache para Windows para escutar algo que não seja a porta 80.

Para mais informações, consulte:

About HTTP Server API - MSDN

    
por 14.02.2012 / 20:32