go - REST HTTPS 服务器错误

标签 go

我正在尝试在 Golang 中创建一个带有 TLS 的 REST 服务器,但该程序无法运行:

http.Handle("/", gorest.Handle())
err = http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)

如果我用非 root 用户运行它,我会得到 listen tcp 127.0.0.1:443: permission denied。使用 root 用户运行它不会显示以前的消息,但在调用时执行 block ListenAndServeTLS。使用的操作系统是 Linux x86_64。有什么想法吗?

最佳答案

权限

端口 <= 1024 是特权端口。你不能使用它们,除非你是 root 或者有明确的 允许使用它们。参见 this answer寻求解释或 wikipedia或者其他的东西 你更信任。

参见 this answer一个解决方案,让您的应用程序无需打开这些端口 给他们 super 用户权限(这是个坏主意)。金钱报价:

sudo setcap 'cap_net_bind_service=+ep' /opt/yourGoBinary

阻塞

ListenAndServe 及其对应的 TLS ListeAndServeTLS 是阻塞的。

gorest.Handle()返回的http handler在访问/时并发执行。 如果你想让其他代码同时运行,在运行 ListeAndServe 之前启动一个 goroutine 或实现不同的 http 处理程序。

使用协程的例子:

func printStuff() {
    time.Sleep(1 * time.Second)
    fmt.Println("foo")
}

func main() {
    go printSTuff()
    log.Fatal(http.ListeAndServe(":80"))
}

关于go - REST HTTPS 服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19279294/

相关文章:

go - Glide 或 dep 依赖问题,vendor 中的依赖不平坦

go - 在 Golang 结构中正确使用绑定(bind) :"required"的输入

google-app-engine - gcloud 部署应用程序找不到导入包 - golang

algorithm - 如何在golang中按字符a对字符串数组进行排序

go - 如何在golang中释放一个websocket和redis网关服务器资源?

ubuntu - WSL2 Golang 安装工具 : Permission denied

go - 获取 gitlab repo 列表 : says "401 Unauthorized"

go - 选择忽略慢的情况?

go - 使用golang表达式包删除DynamoDB字符串属性

arrays - golang 中的变量 getter 函数