First published on MSDN on May 05, 2017
Was assisting a customer on a critical server-down situation with a very generic error: "Page cannot be displayed….". This is a classic error and puts you on an open-ended troubleshooting venue. One of the things you want to do first is to ask yourself few questions: Wasn’t this Server working fine when it restarted last time? If so, why would it fail now? What changed?
Turns out, they installed a 3rd party application few hours back, and the failure started right after. The 3rd party application was uninstalled and Server was rebooted, but it didn't fix the issue. Basically the damage was done, and we don't know what it was. Now it's my job to find that out….neat :)
Started to test the Server, from within and outside, it's not responding. We could login to the Server and run non-IIS applications, but none of the IIS Applications are responding. IIS and all its related services are up and running.
It sounds like IIS has stopped listening to HTTP requests
So, we ran following command to find out what IIS is configured to listen on:
netsh http show iplisten
IP addresses present in the IP listen list:
There you go, 10.2x.6xx.10x was added to the iplisten list. Therefore, http was listening only on 10.2x.6xx.10x and nothing else.
Resolution - Removed the IP from the IPlisten List, and the Website magically started to work.
netsh http delete iplisten 10.2x.6xx.10x
Looks like the 3rd party Application added this IP in the iplisten list, hmmm.
The HTTP Server APIs do not bind to any IP address and TCP port pairs until a user registers a UrlPrefix. By default, once a registration is entered in the request queue, the HTTP Server API binds to the port specified in the UrlPrefix (for example port 80) for all IP addresses (INADDR_ANY or INADDR6_ANY) available on the machine. Problems arise when third party applications (not using the HTTP Server APIs) bind to IP address and port 80 pairs on the machine. The HTTP Server API provides a way to configure the list of IP addresses that it binds and solves this coexistence issue. The system administrator calls the HttpSetServiceConfiguration function with the ConfigId parameter set to the HttpServiceConfigIPListenList value to specify the IP listen list. Both IPv4 and IPv6 addresses can be added to the list. The IP addresses entered apply to all applications on the machine using the HTTP Server API and persist across reboots of the machine. However, any changes to the IP listen list configuration do not take place dynamically; in most cases, a system reboot may be necessary.