Obwohl auf bestimmte Dienste hingewiesen wird (z. B. der "Web Deployment Agent-Dienst"), wird die Hauptursache dadurch nicht behoben. Wenn Sie nur Dienste deaktivieren, die das Problem auslösen, besteht die Möglichkeit, dass sie in Zukunft in einer geringfügig anderen Form wieder den Kopf erheben. Es lohnt sich also zu verstehen, was falsch läuft, denn das führt zu einer besseren Lösung.
Dieses Problem tritt auf, wenn ein Anwendungsserver die vollständige Kontrolle über Port 80 wünscht. Dies steht im Widerspruch zu einer Windows-Funktion, mit der mehrere Prozesse Anforderungen an Port 80 verarbeiten können. Es ist durchaus möglich, dass eine beliebige Anzahl von Prozessen HTTP-Anforderungen an Port empfängt 80, da Windows über einen integrierten HTTP-Versandmechanismus verfügt. Jeder Prozess kann Windows mitteilen, welche URLs verarbeitet werden sollen.
Wenn ein Anwendungsserver dies jedoch völlig ignoriert, befinden Sie sich wieder in der weniger flexiblen Socket-Welt der alten Schule, in der nur ein Prozess Anforderungen empfangen kann, die für einen bestimmten Port bestimmt sind.
Das mag in Ordnung sein - wenn Sie wirklich nichts anderes als einen bestimmten Prozess wollen, der HTTP-Anforderungen an Port 80 verarbeitet, wird es tolerierbar, einen Anwendungsserver zu verwenden, der die flexibleren Mechanismen von Windows nicht unterstützt. (Und einige beliebte App-Server haben diese Einschränkung. AFAIK, Tomcat ist beispielsweise nicht in der Lage, gut mit anderen zu spielen, und besteht darauf, Port 80 für sich allein zu haben. Wenn Sie also den App-Server eines anderen verwenden, ist dies möglicherweise unpraktisch passen Sie es an, um den bevorzugten Mechanismus zu verwenden.)
Windows versucht, solche unflexiblen Dienste zu berücksichtigen, indem es seinen Versandmechanismus nicht an Port 80 bindet, bis etwas aktiv danach fragt. (Aus diesem Grund wird anfangs nicht unbedingt ein Problem angezeigt, das jedoch nach einer Aktualisierung oder Konfigurationsänderung auftreten kann.) Aber sich darauf zu verlassen, ist keine sehr solide Lösung - Sie vertrauen im Wesentlichen auf das Glück, dass nichts versucht, unter Port 80 abzuhören, bevor Ihr App-Server gestartet wird. (Es gibt verschiedene Gründe, warum ein Prozess spekulativ versuchen könnte, sich für bestimmte URLs an Port 80 zu registrieren und sich zurückzuziehen, wenn dies nicht zulässig ist.)
Wenn Sie also möchten, dass ein Dienst exklusiven Zugriff auf Port 80 hat, sollten Sie dies Windows mitteilen. Es ist nicht gut genug, um zu versuchen, alle Dienste auszuschalten, die möglicherweise versuchen, den üblichen Mechanismus zur Portfreigabe zu verwenden, da es schwierig ist, sicher zu sein, dass Sie alle gefunden haben. (Insbesondere, wenn Windows-Updates die Standardeinstellungen zu ändern scheinen.) Es ist wahrscheinlich empfehlenswert, die Ihnen bekannten zu deaktivieren. Am besten gehen Sie jedoch von beiden Seiten vor: Deaktivieren Sie nicht gewünschte Dienste und stellen Sie sicher, dass dies nicht der Fall ist möglich für diejenigen, von denen du nicht wusstest, dass sie dich stolpern lassen.
Standardmäßig HTTP.SYS
(der zugrunde liegende HTTP-Versandmechanismus für die Portfreigabe in Windows) kann alle Adressen abhören. Aber man kann es nicht sagen. Diese Seite zeigt einen Weg, dies zu tun: http://www.mikeplate.com/2011/11/06/stop-http-sys-from-listening-on-port-80-in-windows/
Dies ist eine relativ einfache Methode, da weiterhin IPh6 auf localhost abgehört werden kann. Es gibt nur den IPv4-Port 80 frei. Sie können ihn mit einer spezielleren Konfiguration weiterentwickeln. (Sie können sogar die Funktion HTTP.SYS
vollständig deaktivieren , dies kann jedoch zu Problemen mit anderen Ports als 80 führen, sodass Probleme auftreten können.)
Was auch immer Sie tun, es geht darum sicherzustellen, dass HTTP.SYS
nicht versucht wird, Port 80 an der IP-Adresse abzuhören, die Ihnen wichtig ist. Sobald Sie dies getan haben, müssen Sie sich weder um das Deaktivieren von Diensten noch um andere Änderungen kümmern, die das Problem erneut einführen. Wenn Sie sichergestellt haben, dass der von Ihnen benötigte Endpunkt für die Portfreigabe praktisch außerhalb der Grenzen liegt, sollten Sie feststellen, dass der Systemprozess nicht mehr an ihn gebunden ist.