【发布时间】:2018-01-18 17:19:01
【问题描述】:
我很难弄清楚如何正确地问这个问题,如果我做错了,请原谅(或建议我)。
这是场景。
我有一个 Angular 4 应用程序,其中文件存在于我的主机操作系统(ubuntu 16.04)上,我使用 npm start 命令提供文件。据我了解(我没有编写应用程序),当我运行 npm start 时,它运行位于我的 package.json 中的这个命令:
ng serve --sourcemap --extract-css --host 0.0.0.0 --proxy-config proxy.config.json
不知何故,这导致网站可以在 localhost:4200 上查看
我在虚拟机(也是 ubuntu 16.04)上有另一个旧的 php5 风格的应用程序。虚拟机由 Vagrant 管理,并从 Virtualbox 运行。我的主机上的主机文件设置如下:
127.0.0.1 localhost
192.168.10.11 my.site
虚拟机正在运行 apache2 并且已全部配置完毕。现在我可以毫无问题地同时启动和运行两个系统,但是我被要求通过 iframe 将旧遗留系统的一部分放入新应用程序中。从技术上讲,这是可行的,但是因为这两个系统具有不同的域,所以我对于将 iframe 装入新系统的旧系统可以做什么非常有限。例如,由于 iframe 的安全问题,我什至无法更改基本的 CSS(这几乎是我需要做的所有事情)。
我的问题是,有没有一种方法可以让两个系统在相同的 IP 或域名下启动并运行,并在 iframe 中将一个系统置于另一个系统中,从而消除安全问题?
因此,例如,我可能将 localhost:4200 作为托管在主机上的新 Angular 应用程序,其中 localhost:80 指向虚拟机上的站点。
这个问题涉及一些不同的事情。
1) 我可以将流量从一个端口转发到虚拟机,然后从另一个端口(在同一 IP 上)转发到本地计算机吗?
2) 即使我能做到。如果域/IP 相同但端口不同,iframe 规则是否允许我控制 iframe 中的内容?
或者...如果有更好的方法来做到这一点,我也愿意听到。
附录:
不确定这是否重要,但在 Angular 应用程序中还有一个 proxy.config.json 文件,如下所示:
{
"/api/*": {
"target": "http://localhost:8001",
"changeOrigin": true,
"pathRewrite": {"^/api" : ""},
"secure": false,
"logLevel": "debug"
}
}
这是为了让我的 api 请求可以发送到运行 api 的主机上的另一个端口。该 api 从本地流明代码库运行。我怀疑这与我的核心问题无关,但因为 ng serve 命令包含它,所以为了清楚起见,我想在这里。
【问题讨论】:
-
好吧,我想我已经回答了我的一个问题。如果我可以正确设置它,这是否会起作用。答案似乎是否定的。根据“同源策略”developer.mozilla.org/en-US/docs/Web/Security/…,端口也需要匹配,而不仅仅是域。
-
我现在倾向于某种反向代理来解决我的问题...
标签: angular apache iframe vagrant portforwarding