服務(wù)在本機(jī)可訪問,本機(jī)以外電腦就一定能訪問嗎?

如題,前提當(dāng)然是:網(wǎng)絡(luò)通、端口通。
使用python熟練的人,可能見過這樣一個(gè)框架‘plotly-dash ’;我使用python不多,也只是知道這個(gè)框架的名字和大概的作用。
它可以幫你省掉寫前端頁面的功夫,并且可以用一行python代碼啟動(dòng)一個(gè)web服務(wù)器。
事情就是從這里開始的。
朋友在windows系統(tǒng)上用python編寫了一個(gè)程序,并用‘plotly-dash ’這個(gè)框架啟動(dòng)運(yùn)行,然后測試:
使用127.0.0.1和localhost訪問一切正常,當(dāng)局域網(wǎng)內(nèi)的其他電腦卻無法訪問(在此之前,朋友還將這臺(tái)電腦的ip和mac地址進(jìn)行了綁定——以防ip地址有變動(dòng))。
我不懂這個(gè)框架,朋友也認(rèn)為既然本地都正常了,那問題應(yīng)該出在網(wǎng)絡(luò)上,所以我圍繞這個(gè)‘可能的原因’花了一下午時(shí)間,進(jìn)行了下面一系列嘗試(我們把部署服務(wù)的這臺(tái)電腦叫PC_A):
1、在其他電腦ping PC_A,發(fā)現(xiàn)是通的;
2、然后telnet對應(yīng)的端口,嗯,確實(shí)不通;
3、關(guān)閉PC_A的防火墻,再試,還是不通;
4、在PC_A上開啟防火墻,并新建對應(yīng)端口的入站規(guī)則,重試,失??;
5、網(wǎng)絡(luò)查資料,再新建一個(gè)出站規(guī)則,重試,失??;
6、關(guān)閉防火墻,保留以上規(guī)則,重試,失??;
7、拔掉PC_A的網(wǎng)線,插到一臺(tái)裝有tomcat的電腦上,運(yùn)行,發(fā)現(xiàn)一切正常;
8、啟用SNMP服務(wù)——呃,突然發(fā)現(xiàn)這個(gè)家庭版的windows沒這個(gè)服務(wù),只好從安裝SNMP開始,結(jié)果依舊失??;
9、解綁ip和mac——失敗。
到此,只是排除了電腦以外的問題(比如路由、ip設(shè)置等),還是不知道真正的原因。
這時(shí)想到了應(yīng)該去查看服務(wù)的運(yùn)行狀態(tài),利用netstat命令查看端口信息——一開始發(fā)現(xiàn)結(jié)果很長,而且本機(jī)telnet端口是通的,就沒多看,但此時(shí)只能研究它了。
然后對比了開啟tomcat服務(wù)和dash服務(wù)時(shí)netstat結(jié)果的,發(fā)現(xiàn)了一個(gè)關(guān)鍵的地方:
tomcat開啟后,有0.0.0.0:8080這條記錄;
dash開啟后,只有127.0.0.1:8080記錄。
至此終于確認(rèn)問題就出在dash這個(gè)框架上,將這個(gè)結(jié)果告訴朋友后,他也去查了這個(gè)框架的源碼,發(fā)現(xiàn)這個(gè)框架把127.0.0.1這個(gè)地址硬編碼了進(jìn)去。
后來又查詢了一些資料,發(fā)現(xiàn)java開發(fā)中,也可能會(huì)遇到這個(gè)問題,比如:
在nginx配置中有一個(gè)listen配置項(xiàng),是用來配置監(jiān)聽端口的,只寫端口的時(shí)候,意味著是監(jiān)聽所有ip對應(yīng)的端口請求;但如果寫成[ip]:[port]的形式,就變成了讓nginx只監(jiān)聽這一個(gè)ip發(fā)來的請求。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容