使用Apache部署Go Web应用程序

Kav*_*ian 25 apache deployment cgi go web-deployment

我找不到用于部署Go Web应用程序的mod_go.有没有其他方法可以在Go中使用Apache Web服务器(甚至是IIS)运行Web应用程序?

更新:现在做了近一年的全职工作; 这样做(Go with Apache)使Go的目的无效(高度并发的性能).我正在使用nginx作为http/https的反向代理,并且很好地支持我的Go后端.虽然在使用Go时你必须在webapps上改变一下你的心态.

Mos*_*afa 25

没有mod_go.(至少我没有听说过这样的事情.)

go web app本身就是一个功能强大的Web服务器.您可以在应用程序中收听端口80,然后直接在服务器上运行它.相信我:它确实有效!

但是,如果你不这样做(等原因而具有相同的机器,负载均衡等其他虚拟服务器),你可以使用一个HTTP服务器,比如Nginx的或Apache在你的围棋程序前面的HTTP代理.我使用nginx,它很棒.这是一个过时但仍然非常有用的指南,如何使用nginx.我还没有与Apache做这件事,但是应该帮助.

我推荐你的Go web app或者nginx作为HTTP代理.


Eva*_*haw 22

除了其他选项,还有net/http/fcgi包.这类似于CGI选项,但它使用FastCGI,如果需要,您的应用程序可以保持状态.

这是jimt示例的FastCGI版本.请注意,只有两行不同.根据您配置Apache的方式,您可能必须将第一个参数更改为不同的参数,但nil是常见情况.

package main

import (
    "fmt"
    "net/http"
    "net/http/fcgi"
)

func hello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello from Go!")
}

func main() {
    http.HandleFunc("/", hello)
    fcgi.Serve(nil, nil)
}
Run Code Online (Sandbox Code Playgroud)


小智 13

对于那些感兴趣的人,最近发布了一个Apache的mod_go:

https://github.com/idaunis/mod_go


jim*_*imt 9

虽然不理想,但您可以将Go程序作为CGI脚本运行,方法是将它们放在cgi-bin目录中.你可以像任何其他页面一样调用它们server.com/cgi-bin/myapp?foo=bar

示例程序如下所示:

package main

import (
    "fmt"
    "net/http"
    "net/http/cgi"
)

func hello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello from Go!")
}

func main() {
    http.HandleFunc("/", hello)
    cgi.Serve(nil)
}
Run Code Online (Sandbox Code Playgroud)

这不是像运行程序那样最优的原因,就是使用cgi方法,可以为每个请求调用程序.所以其中的任何状态都不会持续存在.

为清楚起见:您应该将已编译的二进制文件放在cgi-bin目录中.不是节目源.