我想从主机为VM中运行的两个或多个Web应用程序提供服务(不同的端口,并且同一端口下的目录的时间不同),因为我需要用户登录后才能访问这些我无法使用的应用程序 Nginx或Apache之类的静态代理。

所以这是我的情况:

192.168.1.1 : is the host ip
192.168.1.2 : is the VM ip

在虚拟机内部,我有这个:

192.168.1.2/owncloud : owncloud address
192.168.1.2:8080 : an other app
192.168.1.2:8888 : 3rd app

我想要这个:

192.168.1.1/app1 --> 192.168.1.2/owncloud
192.168.1.1/app2 --> 192.168.1.2:8080
192.168.1.1/app2 --> 192.168.1.2:8888

我尝试使用golang httputil.ReverseProxy来实现此路由,但没有成功:
我的代码基于此工作:要点


您最好通过主机名而不是URL来执行此操作。例如

如果您还不知道,主机名只是一个HTTP请求标头(Host:domain.com),因此每个IP可以有多个主机名(Apache称其为"命名虚拟主机")。

使用主机名而不是URL的好处是,另一端的Web应用程序不知道要添加前缀的URL,但需要兑现它们,因此您可能会遇到问题,因为Web应用程序编写的URL并非与反向代理期望的URL进行交互。基于主机名的代理应该在哪里工作,因为大多数Web应用程序都不会重写域名。 (尽管这是一个巨大的概括,但是某些Web应用程序允许您添加代理地址-但通常您会遇到较少的主机名问题)

最大的问题是必须在名称服务器上设置子域。我假设您的registra / DNS提供商允许您免费创建子域(大多数情况下应该如此),但是如果您使用的是动态DNS之类的东西,而这却无法通过您的家庭宽带连接运行,那么您将遇到问题,并且将购买带有CNAME到您的动态DNS地址的子域名的您自己的域名(或者,如果您提供的是子域名,则使用您的动态DNS提供商的付费帐户)。

最后一件事,如果您正在研究owncloud,那么您可能还希望看看Pydio(以前称为AjaxExplore)。它们都有各自的长处和短处,但是以我个人的观点,Pydio是更好的产品。


制作这样的地图

使用httputil.ReverseProxy构建您的处理程序

听和服务

您可以将httputil.ReverseProxy缓存在全局文件中,所有文件都在上面。

这是一个最适合您的SSLDocker项目。


您将错误的IP传递给反向代理。应该是您的VM的192.168.1.2

在文档中

NewSingleHostReverseProxy returns a new ReverseProxy that rewrites URLs to the scheme, host, and base path provided in target.