port 80作為網站預設的port因此大部份的環境都不會檔80 port。這意味著有一些程式會因為這個便利因此使用80 port。 當在開發Java EE 網站的時候,我們通常會使用Tomcat作為Servlet的Container。最討厭的是,當你啟動Tomcat做測試的時候,出現了
Port 80 required by Tomcat v7.0 Server at localhost is already in use....
在這一篇裡面,我會介紹,當遇到這種問題的時候,有什麼解決辦法。
基本上當遇到這種問題的時候,說明文字還蠻清楚,那就是某一個process早已經佔用了我們要使用的port,因此我們處理流程就是:
基本流程:
我們可以透過netstat來看那些process佔用了我們要的port,我們可以在cmd裡面輸入:
1 |
netstat -ano | findstr 0.0:80 |
上面的指令就是使用netstat列出我們所有process所listen的port,然後在透過findstr找出所有port號是80的。
以下面截圖為例,我們有一個process id 是 4 號的,目前正listen port 80:
透過netstat看那些process 佔用port 80首先我們開啟taskmgr.exe:
開啟taskmgr.exe並且以pid欄位做排序假設你的taskmgr.exe沒有顯示pid欄位,那麼在「檢視(View)" -> "選取欄位(Select Columns..)" -> 勾選 "PID (Process Identifier)"
顯示PID欄位以上面netstat找到的例子來說,我們要找的process id 是4號,不過從上面截圖可以看出process id 並沒有4。這個時候我們會需要選取「顯示來自所有使用者的處理程序」:
顯示所有使用者的處理程序找到process id 是4號的程式描述是「NT Kernel & System」。看到這個相信大家還是不知道這個是什麼Orz,沒關係下一部份將會介紹。
上一段介紹了如何查到哪一個process佔用了我們的port,這一階段介紹幾個比較常見會佔用port 80 的process。
首先process id 4和skype沒有關係,不過skype作為大部份電腦都會安裝的軟體,因此從skype開始說。
我第一個遇到佔用80 port的就是skype。很難想像skype為什麼會需要用到port 80,不過看了設定的說明,可能是想要利用port 80 在大部份環境下面都不會被擋住的特性,因此預設會透過port 80和443來傳輸資料。
我們可以再「設定」->「連線」把「以80 和 443 port為替代連入連線」勾掉:
其實process id 4有可能是以下幾種服務導致的:
iis作為一個web serverice當然會佔用port 80,因此我們需要看我們os是否開啟了iis服務。
在Windows 7以上的OS都可以選擇是否要開啟iis服務。預設是關閉的。
我們可以開啟「新增刪除程式(Uninstall or change a program)」-> 「開啟關閉Windows 功能(Turn Windows features on and off)」(這邊中文名稱是我自己翻的,因為os是英文所以不確定正確的中文翻譯),然後看iis是否有開啟:
這邊可以看到IIS有被開啟了這個時候,我們要不是把iis勾掉,要不然就是把iis相關的service就okay了。
在Server環境下面最長看到的一個就是sql server的reporting service佔用了port 80。
我們可以從service.msc(服務管理員)裡面找到這個服務停掉它來釋放port 80,不過如果還想要使用Sql server reporting,我們就需要修改預設使用的port。
在這裡我會介紹如何修改sql reporting service預設使用的port:
開啟Reporting service的組態管理員
找到「Web 服務 URL」->「TCP通訊埠」然後把他從80改成可以用的port
然後找到「報表管理員URL」->「進階」然後把port改成和 上面修改的port號一致
這邊有一個需要注意的是,要用service.msc(服務管理員)來找,而不要用taskmgr(工作管理員)來查找,從上圖就可以看出右邊是用taskmgr而左邊使用service.msc, 然後左邊有顯示但是右邊沒有。
上面提到了一些常見佔用port 80的service。通常來說我們可以在服務的設定裡面修改使用的port,或者以直接停用service的方式達到取回我們的port 80。
不過如果真的找不到佔用的service,那麼就只能修改我們的Tomcat 使用 port。