http - Go 中的虚拟主机

标签 http go virtualhost

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

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

编辑:

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

最佳答案

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

一种常见的方法是为此使用 Apache,但如果您想从 Go 中执行此操作,ReverseProxy type来自 net/http/httputil package应该有帮助。

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

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

关于http - Go 中的虚拟主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21056269/

相关文章:

c++ - 用于嵌入式项目的 C/C++ HTTP 客户端库

http - 是否可以在 Golang 中处理多个域?

Java App接收http PUT和Get请求

security - Fiddler 是否为每台机器创建唯一的私有(private)根证书?

去 'mod init' 创建新文件夹?路径的意义是什么?

go - 在 Go amqp 客户端中设置连接友好名称

apache2 - 带有通配符 VirtualDocumentRoot 的 VirtualHost

Golan 超范围接口(interface){}

apache - 403 错误 - Apache VirtualHost - Ubuntu 22.04

apache - 如何让 Apache 完全拒绝一个目录的非 SSL