Go 中的虚拟主机

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

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

编辑:

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


慕的地10843
浏览 223回答 1
1回答

阿波罗的战车

执行此操作的常用方法是使用反向代理,根据请求中的主机名将请求定向到相关的应用服务器(通常运行在不同的端口或不同的机器上)。一种常见的方法是使用Apache这一点,但如果你想从去做到这一点,该ReverseProxy类型从net/http/httputil包装应该有所帮助。httputil.NewSingleHostReverseProxy(baseurl)将为您提供一个 HTTP 处理程序,该处理程序将请求代理到另一个网站并返回结果。因此,您可以通过多路复用 HTTP 处理程序实现前端,该ReverseProxy处理程序根据请求的主机名将请求定向到多个处理程序之一。如果您需要比NewSingleHostReverseProxy给您更复杂的路由,您可以Director在创建代理处理程序时使用自定义函数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go