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

时间:2019-02-25 04:30:31

标签: go tcp server

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

<b>January</b><br>FurryWheels ANMINB, <br><br>
<b>September</b><br>Hanazuki ANMINB, Hanazuki TESTNAME, <br><br>
<b>August</b><br>MightyMagisword ANMINB, <br><br>
<b>November</b><br>Niko ANMINB, <br><br>
<b>December</b><br>Niko TESTNAME, <br><br>
<b>March</b><br>TeenTitansGo! ANMINB, <br><br>

sudo netstat -tlnp的结果是:

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))
}

我只能在localhost中获得响应,而从远程服务器中没有响应:

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 !

5 个答案:

答案 0 :(得分:1)

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

  • 默认情况下(在* nix平台上),所有传入流量都被阻止,并且所有传出都被允许。您需要打开操作系统上的端口,以允许传入流量进入您的服务器。尝试安装ufw实用程序并运行sudo ufw allow 30175
  • 从问题来看,您的服务器似乎正在使用tcp6。理想情况下,它应该不会引起问题,因为tcp6应该支持IPV4和IPV6。但我建议您将其降级为tcp,如果有道理。

答案 1 :(得分:0)

您正在尝试输出到控制台。您是否尝试发送它作为回复?

func handler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte(fmt.Sprintf("Hi there, I love %s!", r.URL.Path[1:])));
}

答案 2 :(得分:0)

否,如果您不指定地址的主机部分,则服务器将在系统的每个可用单播地址和每个可用播音地址上进行侦听。因此,我会猜测名称解析或路由方面的问题。

答案 3 :(得分:0)

您的问题是您的服务器正在tcp6堆栈上侦听。尝试显式地将tcp与“ 0.0.0.0:6789”一起使用,而不仅仅是端口“:6789”

答案 4 :(得分:0)

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

# listen rules
sudo iptables -L INPUT --line-numbers
sudo iptables -D INPUT 8
相关问题