I.Port80簡介:
II.問題描述:
80端口是一個最為頻繁訪問的端口號,甚為程序員開發更是經常遇到,比如我們最熟悉的數據庫系統服務進程就是默認訪問該端口的,還有比如Ngnix服務器默認端口也是80,所以當使用ngnix時發生端口號沖突了,應該怎么辦呢?以下見析。
III.原因:
主要是與http協議有關的進程,進行網上訪問的系統級別的進程最頻繁占用80端口。比如Http.sys。它是http API的驅動組件,Http棧服務器。如果該端口被Http.sys占用,說明一些正在使用http.sys的應用程序在運行。
IV.解決辦法:
1)使用命令查看哪個線程占用80端口
win+R調出doc窗口,輸入cmd,繼續輸入"netstat -ano | more"或者“netstat -aon”
2)尋找端口號
找到“本地地址”欄為0.0.0.0:80的一行,在行的末尾有pid(進程id)為“4”。
3)打開任務管理器(ctrl+alt+del)
查看pid為4的線程,一般會顯示system占用;自然system是無法直接kill的。
使用netsh命令查看端口使用狀態:”netsh http show servicetstate“。
可以看到有兩個進程正在使用http功能。分別為 3164和3196。
其中3196是sql server的report服務;進程3164對應的是一個svchost服務。
兩者都可以關閉,數據庫服務的見下述解決方式。
【擴展】:
但是,50秒之后端口又會自動被占用了。【重新占用】
從procmonitor中可以看到,每次關閉服務 BranchCache 每50s后就會繼續被svchost給調用起來。
通過services表(服務表)中,我們發現這里的BranchCache 依賴了HTTP.SYS這個內核驅動。
手動禁用即可。
4)多版本解決方案:
【分析】:
1)SQL Server導致。其中很有可能是SQL Server Reporting Services (MSSQLSERVER),它是 SQL Server 的日志系統。
2)IIS 服務。如果你電腦安裝了這個,很有可能它在運行着,那么它就占用着80端口。(打開IIS的方法:打開控制面板,點“卸載”,
彈窗里左側有一個“打開或關閉windows功能”,再點開會有一個彈窗,找“Internet信息服務”,找到 Internet Information Services,
點加號展開!因為直接點這個大項前面的小方塊,FTP服務器選項沒反應,我圖里的這幾個都勾上就行了。
然后右下角點確定,IIS開啟成功了。
關上:開始圖標那個win旁邊有個圈圈,點開輸入iis回車就能打開IIS管理器,右擊,點停止,IIS就算關上了。(win10系統)
3)其他。(比如,迅雷等程序或者一些其他有上傳功能的軟件都會占用電腦的80端口)
A.已知為數據庫進程占用,最常見:
i.查看“任務管理器”進程欄或者詳細信息欄,有沒有數據庫有關的進程,直接kill就行。
ii.打開【管理】->【服務和應用程序】->【服務】->找到“SQL Server Reporting Service",禁用或者手動皆可。
以上可以解決基本上90%左右的占用問題。
(一般來說,可能是近期安裝了數據庫或者升級了數據庫等軟件造成的,系統占用的端口一般都是微軟官方的產品占用的。)
B.未知進程,即system進程(win7 system默認占用):
i.禁用http.sys
輸入net stop http,然后確認繼續操作,在輸入Sc config http start= disabled即可停止該項服務。
ii.調出注冊表
打開RegEdit:【開始】->【運行】->輸入【regedit】調出 ”注冊表“,
找到”HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesHTTP“,
找到一個DWORD值Start,將其改為0,重啟電腦,System進程將不會占用80端口。
【備注】:殺掉進程的命令:taskkill /pid 4 /f ,其中 /f 表示強制關閉該進程。