将节点js应用程序映射到Apache中的urlpath

我想提供节点应用程序作为我的域的path,如下所示: 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中使用子目录的问题

我咀嚼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访问该文件。 http://example.com/foo/styles/4742a4e8.main.css

如果/ styles /中没有使用example.com,你可以添加

 ProxyPass /styles http://localhost:8080/styles ProxypassReverse /styles http://localhost:8080/styles 

但是如果你有很多的目录,这可能会变得很麻烦。

另一种方法是在您的节点应用程序上使用相对path。 因此,而不是index.html引用/styles/4742a4e8.main.css它引用styles/4742a4e8.main.css (没有前导斜杠)。 在节点应用程序中嵌套的path可能会变得很麻烦。

进一步的解决scheme可能是修改您的node.js应用程序以完全运行在localhost:/ foo下,因此目录映射是相同的。

我不确定这些解决scheme是否适合您的使用情况,但他们希望能指出您正确的方向。