【发布时间】:2015-04-27 23:20:27
【问题描述】:
我一直在尝试在我的 apache 服务器上添加一个 NodeJS 应用程序(由 Yeoman - angular-fullstack 生成器构建)。 我发现了另一个已回答的问题:Apache and Node.js on the Same Server 建议像这样使用 ProxyPass:
ProxyPass /node http://localhost:8000/
当我这样做时遇到的问题是我的应用程序在 index.html 上启动,其中包含一些带有 href 的文件。 由于这些 href 不是这样开始的
href="/node/..."
它们没有被 Proxypass 重定向,因此会导致 404 错误。
我不能只更改所有的 href:这意味着我需要在我的 3 个环境中重新做一遍:开发、生产和测试,即使我这样做了,每次我都会使用 Grunt 进行测试我的应用程序,无论如何它都会自动重建我的 index.html。 (此外,它并不能解决所有问题,当我这样做时,socketio 会出现一些问题)
那时我唯一能做的就是像这样使用 ProxyPass:
ProxyPass / http://localhost:8000/
它确实有效,绝对没问题,就像我实际上是在本地主机上的服务器上使用该应用程序一样。
唯一剩下的问题是我的服务器上需要有 2 个环境,一个用于生产环境,一个用于测试,而我就是做不到
ProxyPass / http://localhost:8000/
ProxyPass / http://localhost:8001/
这显然是行不通的,因为一切都将被重定向到端口 8000 之前任何东西都可以到达第二行。
所以,我只有两个选择:
找到另一种解决方案,而不是使用“/”作为重定向到 localhost:8000 的标准,它会以相同的方式工作(我没有发现任何工作)
或者使用虚拟主机...还有另一个问题:据我了解,我对网络问题真的不满意,要在同一台机器上拥有多个虚拟主机,我需要多个 CNAME(每个虚拟主机一个hosts),但我不知道如何列出/添加 CNAMES(我的服务器在 Windows Server 2008 上运行,无法访问万维网),而且我的“管理工具”中没有任何“DNS”应用程序我应该按照这个:https://technet.microsoft.com/en-gb/library/cc753579.aspx
非常欢迎任何帮助 提前致谢!
编辑:我真的认为我的解决方案是调整我的 Apache 配置。任何曾经处理服务器配置的人都可以帮助我吗? :/
【问题讨论】:
-
您可以尝试为所有 AJAX 请求添加前缀,然后在 ProxyPass 中使用该前缀。
-
我不认为这些是 AJAX 请求,只是一些普通的 HTML href 属性,而且由于 Yeoman 几乎覆盖了我在 index.html 上所做的任何事情,这不会是一个长期的修复,因为我每次我有一个新版本要投入生产/测试时都需要重做
-
这些 href 的结构是什么?
-
其中大部分是 href="bower_components/..." 或 href="app/..." 但是这些链接在两个 prod en 测试服务器中是相同的,所以我不能使用另一个 ProxyPass 来处理这些
标签: angularjs node.js apache cname