我想将节点应用程序作为我的域的路径,如下所示:http://example.com/foo实际上将为端口 8080 上运行的节点应用程序提供服务。
我已经研究过 ProxyPass 和 ProxyPassReverse:
ProxyPass /foo http://localhost:8080
ProxypassReverse /foo http://localhost:8080
这将为节点应用程序的 index.html 提供服务,但我的控制台中出现有关所有资产的错误:
Failed to load resource: the server responded with a status of 404 (Resource not found) http://example.com/styles/4742a4e8.main.css
我以为 ProxyPassReverse 指令会解决这个问题,但显然没有。我有非常对 Apache 的了解有限。有什么好的办法可以解决这个问题吗?
免责声明:是的,我研究过许多有关 nodejs 与 apache 结合的问题,但没有一个解决在 url 中使用子目录的问题
答案1
我猜想这http://example.com/styles/4742a4e8.main.css
实际上是你的节点 JS 应用程序上的一个文件,因此指的是http://localhost:8080/styles/4742a4e8.main.css
,但在你的节点应用程序的 index.html 中被引用为/styles/4742a4e8.main.css
使用代理映射时,当你请求
http://example.foo/foo/
它发送的请求http://localhost:8080/index.html
按原样返回。index.html 中的任何引用都不会被修改,因此当浏览器请求组件时,它正在请求,http://example.com/styles/4742a4e8.main.css
但该文件实际上只能通过以下方式访问http://example.com/foo/styles/4742a4e8.main.css
如果 example.com 中未使用 /styles/,则可以添加
ProxyPass /styles http://localhost:8080/styles
ProxypassReverse /styles http://localhost:8080/styles
但如果您有很多目录,这可能会变得麻烦。
另一种方法是在节点应用程序上使用相对路径。因此,不要引用 index.html,而是/styles/4742a4e8.main.css
引用它styles/4742a4e8.main.css
(没有前导斜杠)。如果节点应用程序中有嵌套路径,这可能会变得很麻烦。
进一步的解决方案可能是修改您的 node.js 应用程序以完全在 localhost:/foo 下运行,以便目录映射相同。
我不确定这些解决方案是否适合您的使用情况,但希望它们能为您指明正确的方向。