最近有寫一部分go語言開發的程序,在部署程序時發現,程序在啟動后并沒有綁定ipv4的端口,而是直接監聽綁定ipv6的端口。
當我用netstat -antup | grep 3601
查找我的gin服務啟動的端口占用情況的時候發現,我的服務直接綁定了tcp6 (也就是監聽ipv6協議的 3601端口),但是我服務器僅僅只開通了ipv4的協議,所以,一直訪問不通。
解決方案:
方案一:
// gin服務的路由(也就是我們常說的請求訪問路徑的注冊)r := router.SetupRouter()port := fmt.Sprintf(":%s", config.ListenerPort)// 強制啟動綁定給ipv4server := &http.Server{Addr: port, Handler: r}ln, err := net.Listen("tcp4", port)if err != nil {panic(err)}type tcpKeepAliveListener struct {*net.TCPListener}erred := server.Serve(tcpKeepAliveListener{ln.(*net.TCPListener)})log.Println("server start success", erred)if erred != nil {panic(err)}
方案二:
直接關閉linux的ipv6協議
方案三(不推薦):
Linux服務器直接開放ipv6端口,但是可能部分網絡不支持ipv6訪問。