为了账号安全,请及时绑定邮箱和手机立即绑定

Go 中的虚拟主机

Go 中的虚拟主机

Go
慕的地10843 2021-07-14 15:01:30
有没有办法在单个端口(例如 80)上处理对多个 Go Web 应用程序的侦听。我知道 ServeMux 和侦听不同传入主机名的能力,但在这种方法中,它们必须在同一个程序中处理,因此必须在同一个二进制文件中处理。最好的方法是在一个二进制文件中侦听 :80 上的主机名,然后将请求/响应编写器发送到其他地方的另一个相应的二进制文件吗?我会用"os/exec"这个吗?您将如何将Request和ResponseWriter参数传递给这个外部二进制文件?提前致谢!编辑:不同二进制来源的 goroutine 是否可以访问彼此的通道?这将是一个很酷的方式来做到这一点。
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

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

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

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

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


查看完整回答
反对 回复 2021-07-19
  • 1 回答
  • 0 关注
  • 222 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信