Windows Sever關於80端口之爭

默認情況下安裝了IIS服務器角色的Windows系統,其80端口就被佔用了。但是佔用80端口的進程卻不是WWW Service更不是IIS Admin Sevice,而是處於kernel地位的Http.sys。通過命令netstat -ano可以輕易發現佔用80端口的是PID爲4的System進程。該進程是Winodws NT系統的內核進程的別名。硬件系統啓動並完成引導後載入的Windows系統內核和其他重要的系統文件,其中包含http.sys。http.sys準確來說是實現http協議的組件,不是一個Windows服務,在系統進程中無法找到,在系統的服務中也無法找到,但卻是IIS的重要組件WWW Service所依的關鍵組件。下圖展示了IIS的Http的請求架構,更多關於IIS的架構可以查閱這裏

回到主題,http.sys作爲kernel地位的組件可不是IIS專屬的,許多面向Windows應用和服務都可以調用http.sys的API進行編程,帶來了很多方便。但是對於諸如Apache和Nginx這些誕生於Linux的開源軟件移植到Windows平臺時,就不那麼有趣了,他們不使用http.sys的API。那麼問題來了,不使用共同的中間件,出現硬件資源衝突在所難免。如果可以確保改系統只用於運行Apache和Nginx這些軟件,那可以簡單的使用命令net stop http的停掉http.sys。但是依賴http.sys的應用和服務太多了,而且有時我們希望他們能夠共存,並解決端口衝突的問題。

那麼比較好的解決方案是:限制http.sys監聽80端口的ip地址,讓http.sys只監聽在列表中的IP的80端口,而其他的IP地址的80端口給Apache和Nginx使用。如下:

PS C:\Users\administrator.cloud> netsh
netsh>http
netsh http>add iplisten 172.16.1.1

IP address successfully added

netsh http>show iplisten

IP addresses present in the IP listen list:
-------------------------------------------

    172.16.1.1

netsh http>delete iplisten 172.16.1.1

IP address successfully deleted

netsh http>quit
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章