我找不到用於部署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