我找不到用于部署Go Web应用程序的mod_go。使用Apache Web服务器(甚至是IIS)可以在Go中运行Web应用程序吗?使用Apache部署Go Web应用程序
更新:现在做了全职近一年后;这样做(Go with Apache)正在取消Go的目的(性能是高度并发的)。而且我使用nginx作为http/https的反向代理,并将Go后端很好地放在后面。尽管在使用Go时,您必须稍微改变一下webapps的思维模式。
我找不到用于部署Go Web应用程序的mod_go。使用Apache Web服务器(甚至是IIS)可以在Go中运行Web应用程序吗?使用Apache部署Go Web应用程序
更新:现在做了全职近一年后;这样做(Go with Apache)正在取消Go的目的(性能是高度并发的)。而且我使用nginx作为http/https的反向代理,并将Go后端很好地放在后面。尽管在使用Go时,您必须稍微改变一下webapps的思维模式。
没有mod_go。 (至少我还没有听说过这样的事情。)
一个去网页应用程序本身是一个功能强大的网络服务器。您可以在您的应用程序中收听端口80,然后直接在您的服务器上运行它。相信我:它确实有效!
但是,如果您没有这样做(由于在同一台机器上具有其他虚拟服务器,负载平衡等原因),您可以使用HTTP服务器(例如nginx或Apache)作为HTTP代理你的Go应用程序。我使用nginx,它很棒。 Here's an outdated but still very useful指导如何用nginx做到这一点。我没有使用Apache,但this应该有所帮助。
我推荐你自己的Go Web应用程序或者nginx作为HTTP代理。
我发现这个mod_go的github回购,它可能是有趣的检查:https://github.com/idaunis/mod_go – 2015-07-22 12:56:41
虽然不是很理想,但您可以通过将Go程序放置在cgi-bin目录中,将它们作为CGI脚本运行。你可以调用它们像任何其他页面通过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)
}
的原因,这是不是运行程序为自己的服务器是最佳的,是用CGI方法,程序会针对每一个请求进行调用。所以它内部的任何状态都不会持续。
为了清楚起见,您应该将已编译的二进制文件放在cgi-bin目录中。不是程序源。
除了其他选项,还有net/http/fcgi包。这与CGI选项类似,但它使用FastCGI,如果需要,您的应用程序可以保持状态。
下面是jimt示例的FastCGI版本。请注意,只有两条线是不同的。根据你如何配置Apache,你可能不得不将第一个参数改变为不同的东西,但是零是常见的情况。
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)
}
你知道任何使用net/http/fcgi的例子吗? – BurntSushi5 2012-04-06 22:32:47
@ BurntSushi5编辑添加示例 – 2012-04-07 08:22:43
但是,这里有一个限制,这对某个人可能很重要。引用软件包文档:“目前只支持响应者角色”。这意味着这种方式无法通过Go代码来处理http认证。 – abbot 2012-04-09 04:49:45
我只是使用Web服务器的代理功能,并在服务器上将我的应用程序作为常规守护程序(使用daemonize)运行。在Apache将是ProxyPass
+ ProxyPreserveHost
。
你有什么例子吗? – slier 2017-12-06 07:42:40
对于那些有兴趣有一个最近发布mod_go的Apache在这里:
有兴趣,这也可以看出[类似的问题(http://stackoverflow.com/q/17440415/165293)。 – Mostafa 2013-09-09 04:49:32