我可以在一个端口上托管 angular 应用程序,在另一个端口上托管旧版应用程序吗(在虚拟机中)

Can i host angular app on one port and legacy app on another (in a vm)

我很难弄清楚如何正确地提出这个问题,如果我做错了,请原谅(或建议我)。

这是场景。

我有一个 angular 4 应用程序,其中的文件存在于我的主机操作系统 (ubuntu 16.04) 上,我使用 npm start 命令提供该文件。据我了解(我没有编写应用程序)当我 运行 npm 启动它时 运行s 这个命令位于我的 package.json:

ng serve --sourcemap --extract-css --host 0.0.0.0 --proxy-config proxy.config.json

不知何故,这导致网站可以在 localhost:4200

上查看

我有另一个传统的 php5 风格的应用程序,它在虚拟机上(也是 ubuntu 16.04)。虚拟机由 Vagrant 管理,并且来自 Virtualbox 运行ning。我的主机上的主机文件设置如下:

127.0.0.1       localhost
192.168.10.11   my.site

虚拟机有apache2 运行ning,全部配置完毕。现在我可以毫无问题地同时启动和 运行ning 两个系统,但是我被要求通过 iframe 将旧遗留系统的一部分放入新应用程序中。从技术上讲,这是可行的,但是因为两个系统都有不同的域,所以我对使用 iframed 到新系统中的旧系统可以做什么非常有限。例如,由于 iframe 的安全问题,我什至无法更改基本 CSS(这几乎是我需要做的全部)。

我的问题是,有没有一种方法可以让我在同一个 IP 或域名下启动和 运行ning 两个系统,并在 iframe 中以安全的方式将一个系统置于另一个内部问题消除了吗?

因此,例如,我可能 localhost:4200 是主机上托管的新 angular 应用程序,其中 localhost:80 指向虚拟机上的站点.

这个问题涉及到一些不同的东西。

1) 我可以将流量从一个端口转发到虚拟机,然后从另一个端口(在同一 IP 上)转发到本地计算机吗?

2) 即使我能做到。如果 domain/IP 相同但端口不同,iframe 的规则是否允许我控制 iframe 中的内容?

或者...如果有更好的方法,我也愿意听听。

附录:

不确定这是否重要,但 angular 应用程序中还有一个 proxy.config.json 文件,如下所示:

{
    "/api/*": {
        "target": "http://localhost:8001",
        "changeOrigin": true,
        "pathRewrite": {"^/api" : ""},
        "secure": false,
        "logLevel": "debug"
    }
}

这是为了让我的 api 请求可以发送到主机上的另一个端口,其中 api 是 运行ning。 api 是来自本地 lumen 代码库的 运行ning。我怀疑这与我的核心问题无关,但因为 ng serve 命令包含它,为了清楚起见,我想在此处使用它。

我终于想出了一个更好的方法来做到这一点,它不涉及一些复杂的反向代理。其实答案很简单。

当有人问我如何将 angular 应用程序部署到生产环境时,我得到了答案,而我不知道这实际上是如何完成的。在我们的开发阶段,我们只是使用 npm start 命令为应用程序提供服务,但事实证明还有一个名为 'ng build --prod' 的命令,当您要部署到生产环境时会使用它。

到目前为止,我一直很困惑为什么需要以任何特殊方式提供前端应用程序。为什么我不能把文件放在一个盒子上,然后将 apache 指向它们?事实证明,你完全可以做到这一点。 ng build 命令将你的 angular 应用程序变成一组简单的文件,你可以把它们放在任何你想托管的地方,所以对我来说,我只是把这些文件放在托管旧系统的虚拟机上(我移动了旧系统到子文件夹)和 whalla!不再有跨源问题。