Go中的虚拟主机

时间:2014-01-10 23:18:02

标签: http go virtualhost

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

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

编辑:

不同二进制来源的goroutine是否可以访问彼此的频道?这将是一种很酷的方式。

1 个答案:

答案 0 :(得分:5)

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

一种常见的方法是使用Apache,但是如果你想从Go开始,ReverseProxy type中的net/http/httputil package应该有帮助。

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

如果您需要比NewSingleHostReverseProxy提供的更复杂的路由,则可以在创建代理处理程序时使用自定义Director功能。