Go中的虚拟主机

Mor*_*man 3 http virtualhost go

有没有办法在单个端口上处理多个Go Web应用程序的监听(例如80).我知道ServeMux和侦听不同传入主机名的能力,但在这种方法中,它们必须在同一程序中处理,因此必须使用相同的二进制文件.

最好的方法是监听主机名:80在一个二进制文件中,然后将请求/响应编写器发送到另一个相应的二进制文件?我会用"os/exec"它吗?你将如何在传递RequestResponseWriter参数,这个外部二进制?提前致谢!

编辑:

不同二进制来源的goroutine是否可以访问彼此的通道?这将是一个很酷的方式来做到这一点.

Jam*_*dge 5

执行此操作的常用方法是使用反向代理,该代理根据请求中的主机名将请求定向到相关的应用服务器(通常在不同的端口或不同的计算机上运行).

一种常见的方法是使用Apache,但是如果你想从Go中做到这一点,那么包中ReverseProxy类型应该会有所帮助.net/http/httputil

httputil.NewSingleHostReverseProxy(baseurl)将为您提供一个HTTP处理程序,将请求代理到另一个网站并返回结果.因此,您可以通过多路复用HTTP处理程序实现前端,该ReverseProxy处理程序根据请求的主机名将请求定向到多个处理程序之一.

如果您需要比NewSingleHostReverseProxy给出更复杂的路由,则可以Director在创建代理处理程序时使用自定义函数.