使用Apache部署Go Web应用程序

时间:2012-04-05 21:25:21

标签: 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的思维方式。

6 个答案:

答案 0 :(得分:25)

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

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

但是如果你不这样做(出于诸如在同一台机器上安装其他虚拟服务器,负载平衡等原因),你可以在你面前使用HTTP服务器,如nginx或Apache作为HTTP代理去app。我使用nginx,它很棒。 Here's an outdated but still very useful指导如何使用nginx。我没有用Apache做过,但是this应该有所帮助。

我推荐您的Go网络应用程序或nginx作为HTTP代理。

答案 1 :(得分: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)
}

答案 2 :(得分:12)

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

https://github.com/idaunis/mod_go

答案 3 :(得分: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)
}

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

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

答案 4 :(得分:2)

我只是使用Web服务器的代理工具,并在服务器上将我的应用程序作为常规守护程序(使用daemonize)运行。在apache上ProxyPass + ProxyPreserveHost

答案 5 :(得分:0)

这会将域和子域请求代理到指定的端口。

NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    ServerName www.yourdomain.com
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    ServerName subdomain.yourdomain.com
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass / http://127.0.0.1:8081/
    ProxyPassReverse / http://127.0.0.1:8081/
</VirtualHost>
相关问题