http.ListenAndServe仅适用于localhost?

时间:2016-10-15 19:07:22

标签: http go server

我成功地使用了

http.ListenAndServe(":80", mux)

在Go中托管我的网络服务。但它似乎只适用于localhost。

http.ListenAndServe("192.168.1.83:80", mux)

这适用于此地址上的特定连接,但有没有办法让它适用于服务器上的任何IP地址?

修改

我用不同的端口(在这种情况下是8080)检查了它,然后使用“:8080”按照记录的方式工作。即使在同一台机器上进行测试,这意味着端口80似乎有些特殊,这意味着它实际上只能侦听本地主机。

为避免疑问,我正在使用Windows,所有测试都在同一台物理计算机上完成。我还检查了使用管理员权限运行,但没有任何区别。

2 个答案:

答案 0 :(得分:6)

http.ListenAndServe(":80", mux)是正确的地址。 net/http使用net包。引自net.Listen()

  

如果省略host,如":8080", Listen侦听所有可用接口,而不仅仅是具有给定主机地址的接口。有关地址语法的详细信息,请参阅拨号。

知道端口80在许多系统上受到限制或可能被防火墙阻止。在unix系统上,1024以下的端口通常需要特殊权限。例如,测试8080端口,因为这种方式并不特殊。

答案 1 :(得分:0)

不,http.ListenAndServe适用于任何主机或端口,但1024以下的端口需要root权限。 您可以使用以下方式将端口80上的连接重定向为普通用户:

sudo apt-get install iptables-persistent
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo netfilter-persistent save
sudo netfilter-persistent reload