为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
犯罪嫌疑人X 2023-06-12 12:57:45
我使用 golang 在 Azure Linux VM 中实现了一个 HTTP 服务器。下面是简单的 golang 服务器代码,侦听端口 30175。该端口上没有防火墙。package mainimport (    "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 nametcp        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-sesmantcp        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:30175Hi there, I love !curl serveripaddress:30175not working
查看完整描述

4 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

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



查看完整回答
反对 回复 2023-06-12
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

这与您的代码无关。这是一个典型的防火墙问题。

  • 默认情况下(在 *nix 平台上)阻止所有传入流量并允许所有传出流量。您需要打开操作系统上的端口以允许传入流量访问您的服务器。尝试安装ufw实用程序并运行sudo ufw allow 30175

  • 从问题来看,您的服务器似乎正在使用 tcp6。理想情况下,它不会导致问题,因为 tcp6 应该同时支持 IPV4 和 IPV6。但我建议您将其降级为 tcp,如果这有意义的话。


查看完整回答
反对 回复 2023-06-12
?
SMILET

TA贡献1796条经验 获得超4个赞

这是由于 Linux 监听规则。我的规则中有一条拒绝所有规则。


# listen rules

sudo iptables -L INPUT --line-numbers

sudo iptables -D INPUT 8


查看完整回答
反对 回复 2023-06-12
?
慕神8447489

TA贡献1780条经验 获得超1个赞

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



查看完整回答
反对 回复 2023-06-12
  • 4 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信