猿问

golang http 服务器 http.ListenAndServe 仅适用于本地主机?

我使用 golang 在 Azure Linux VM 中实现了一个 HTTP 服务器。下面是简单的 golang 服务器代码,侦听端口 30175。该端口上没有防火墙。


package main


import (

    "fmt"

    "log"

    "net/http"

)


func handler(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])

}


func main() {

    http.HandleFunc("/", handler)

    log.Fatal(http.ListenAndServe(":30175", nil))

}

sudo netstat -tlnp 的结果是:


Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      1605/vsftpd     

tcp        0      0 127.0.0.1:3350          0.0.0.0:*               LISTEN      1873/xrdp-sesman

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1697/sshd       

tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1379/cupsd      

tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      4879/8          

tcp        0      0 127.0.0.1:6011          0.0.0.0:*               LISTEN      15507/9         

tcp        0      0 0.0.0.0:3389            0.0.0.0:*               LISTEN      1859/xrdp       

tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      2112/python     

tcp6       0      0 :::22                   :::*                    LISTEN      1697/sshd       

tcp6       0      0 ::1:631                 :::*                    LISTEN      1379/cupsd      

tcp6       0      0 ::1:6010                :::*                    LISTEN      4879/8          

tcp6       0      0 ::1:6011                :::*                    LISTEN      15507/9         

tcp6       0      0 :::30175                :::*                    LISTEN      46595/HttpHandler

我只能在本地主机上得到响应,但没有来自远程服务器的响应:


curl localhost:30175

Hi there, I love !

curl serveripaddress:30175

not working


犯罪嫌疑人X
浏览 146回答 4
4回答

白衣非少年

您的问题是您的服务器正在侦听 tcp6 堆栈。尝试明确使用带有“0.0.0.0:6789”的 tcp 而不仅仅是端口“:6789”

蛊毒传说

这与您的代码无关。这是一个典型的防火墙问题。默认情况下(在 *nix 平台上)阻止所有传入流量并允许所有传出流量。您需要打开操作系统上的端口以允许传入流量访问您的服务器。尝试安装ufw实用程序并运行sudo ufw allow 30175从问题来看,您的服务器似乎正在使用 tcp6。理想情况下,它不会导致问题,因为 tcp6 应该同时支持 IPV4 和 IPV6。但我建议您将其降级为 tcp,如果这有意义的话。

SMILET

这是由于 Linux 监听规则。我的规则中有一条拒绝所有规则。# listen rulessudo iptables -L INPUT --line-numberssudo iptables -D INPUT 8

慕神8447489

不,如果您不指定地址的主机部分,服务器将侦听系统的每个可用单播地址和每个可用任播地址。所以我猜是名称解析或路由方面的问题。
随时随地看视频慕课网APP

相关分类

Go
我要回答