連接被拒絕的主要原因包括服務(wù)未運行、防火墻攔截或服務(wù)監(jiān)聽地址錯誤。1. 首先確認服務(wù)是否運行,使用 systemctl status 檢查狀態(tài),若未運行則用 systemctl start 啟動;2. 檢查端口監(jiān)聽情況,使用 netstat -tulnp 或 ss -tulnp 確認服務(wù)監(jiān)聽的地址和端口,若僅監(jiān)聽 127.0.0.1 則需修改配置文件使其監(jiān)聽 0.0.0.0 或外部ip;3. 檢查防火墻規(guī)則,使用 iptables -l 或 firewall-cmd –list-all 查看是否放行目標端口,必要時添加允許規(guī)則;4. 檢查網(wǎng)絡(luò)連通性,通過 ping 和云平臺安全組規(guī)則確保網(wǎng)絡(luò)可達;5. 檢查 dns 解析,使用 nslookup 或 dig 確保域名解析正確;6. 排查服務(wù)配置錯誤,如數(shù)據(jù)庫憑據(jù)或 web 服務(wù)器虛擬主機配置;7. 檢查系統(tǒng)資源限制,使用 top 或 htop 查看資源使用情況。即使服務(wù)運行也可能因監(jiān)聽地址錯誤、防火墻阻止或資源耗盡導致連接失敗。可通過臨時禁用防火墻判斷是否為其所致。快速定位問題應(yīng)從服務(wù)狀態(tài)、端口監(jiān)聽、防火墻逐步排查,再深入網(wǎng)絡(luò)、dns和服務(wù)配置,結(jié)合 tcpdump 抓包輔助分析。
為什么即使服務(wù)運行了,仍然出現(xiàn) “Connection refused”?
服務(wù)運行并不代表它在監(jiān)聽正確的地址和端口。常見的原因是服務(wù)配置錯誤,比如監(jiān)聽地址只設(shè)置為 127.0.0.1,或者防火墻阻止了外部連接。另外,服務(wù)可能因為資源限制而無法處理新的連接請求。
如何確定是防火墻阻止了連接?
最直接的方法是暫時禁用防火墻,然后再次嘗試連接。如果禁用防火墻后連接成功,那么可以確定是防火墻規(guī)則導致的問題。使用 systemctl stop firewalld (firewalld) 或 iptables -F (iptables) 禁用防火墻。禁用后,記得重新啟用防火墻并添加正確的規(guī)則。
遇到 “Connection refused” 時,如何快速定位問題?
首先,從最簡單的步驟開始,確認服務(wù)是否運行。然后,檢查端口監(jiān)聽情況,確保服務(wù)在監(jiān)聽正確的地址和端口。接下來,檢查防火墻規(guī)則。如果以上步驟都沒有發(fā)現(xiàn)問題,再考慮網(wǎng)絡(luò)連通性、DNS 解析、服務(wù)配置等因素。使用工具如 tcpdump 或 wireshark 抓包分析,可以更深入地了解網(wǎng)絡(luò)流量情況,幫助定位問題。例如,tcpdump -i any port 8080 可以抓取所有端口為 8080 的網(wǎng)絡(luò)包。