防火墙阻止了Go开发服务器

13

我正在使用Beego框架开发Go API。每当我保存文件时,Beego框架会重启Go开发服务器(像往常一样),并更新所有内容。

但是,在我的Mac上,当二进制文件(Go服务器文件)被重新构建并重新启动后,我的防火墙会询问是否允许该二进制文件接受传入的网络连接,这是唯一的问题。

我尝试了一些有关对二进制文件进行签名等操作的研究,但没有什么帮助,因为每次更改我的文件时都会重新构建二进制文件(因此Go开发服务器会重启)。

有人知道如何忽略弹出窗口而不关闭我的防火墙吗?

2个回答

36

根据您的情况,让您的Go程序仅在本地主机(127.0.0.1)上监听可能更容易。这样程序就不需要请求防火墙穿透,您也不会收到那个消息。

在Go中,可以这样实现:

log.Fatal(http.ListenAndServe("127.0.0.1:8080", router))

而不是:

log.Fatal(http.ListenAndServe(":8080", router))

然后,在构建生产环境之前,可以添加类似于build或env变量来禁用仅限本地主机的功能。


2
你救了我的一天。 - Hossein
谢谢,弹出窗口真的很烦人。这里有一段代码片段,可以在例如1337和127.0.0.1:1337之间切换port := os.Getenv("PORT") if port == "" { port = "8080" } if !strings.Contains(port, ":") { port = ":" + port } - Stefanos Chrs

3
如果您知道您的Go程序正在监听哪个TCP/IP端口,您可以在防火墙中打开该端口。
类似以下操作:
```bash sudo ufw allow /tcp ```
其中 `` 是您的Go程序监听的端口号。
sudo ipfw add 8080 allow tcp from any to any dst-port 8080

应该可以解决问题,但最好阅读一些关于OSX防火墙的资料。这个讨论看起来很有希望:此处

编辑:自OSX 10.8起,ipfw已被弃用(但仍然可用)。现在应该使用pfctl。有一个名为"IceFloor"的GUI可用于配置它。

ipfw文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接