我成功地使用了
http.ListenAndServe(":80", mux)
在Go中托管我的网络服务。但它似乎只适用于localhost。
http.ListenAndServe("192.168.1.83:80", mux)
这适用于此地址上的特定连接,但有没有办法让它适用于服务器上的任何IP地址?
修改
我用不同的端口(在这种情况下是8080)检查了它,然后使用“:8080”按照记录的方式工作。即使在同一台机器上进行测试,这意味着端口80似乎有些特殊,这意味着它实际上只能侦听本地主机。
为避免疑问,我正在使用Windows,所有测试都在同一台物理计算机上完成。我还检查了使用管理员权限运行,但没有任何区别。
答案 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