【发布时间】:2019-03-31 14:44:23
【问题描述】:
我在 Raspbian 的 8000 和 80 上设置了一个 nodejs http 服务器。
NodeJS 将提供 *.njs 文件,以响应所有请求。 (njs 文件与 php 相同。我让它看起来像返回 onRequest、onUpgrade 和 onConnect 的模块)。
Apache 将提供任何文件类型,例如 html、php、图像等。
Apache 将是其中提供任何文件的主要服务器。并且 *.njs 文件也在 http 文件夹中。虽然存在请求任何 *.njs 文件的连接,但它会转发(而不是重定向)到 nodejs http 服务器,然后它会再次返回到客户端。
简单地说:每个请求都应该从Apache传递,然后转发到NodeJS http服务器并由它处理,然后返回给客户端。
我怎么能这样做?
*当我向它发出请求时,NodeJS HTTP Server 做得很好,没有问题。
当我在 Internet 上搜索时,我发现 Proxy 可以帮助我。
我已经激活了代理模块。已设置为000-default.conf。使用ProxyPass 和ProxyPassMatch 可以将连接传递到NodeJS http 服务器,但它无法返回。然后,我尝试使用ProxyPassReverse。但它只能服务于一条路线,而不是特定的多条路线。
我尝试了ProxyRemote、SetHandler、<Proxy *>、<Location ~ ".*">,但仍然无法正常工作。
这是我在000-default.conf 所做的所有事情。
第一次尝试,
<VirtualHost *:80>
ProxyPassMatch "\.njs$" "http://0.0.0.0:8000"
ProxyPassReverse "/*" "http://0.0.0.0:8000"
ProxyRemote "/*" "http://0.0.0.0:8000"
SetHandler "http://0.0.0.0:8000"
</VirtualHost>
第二次尝试,
<VirtualHost *:80>
<Location ~ "\.njs$">
ProxyPass "http://0.0.0.0:8000"
ProxyPassReverse "http://0.0.0.0:8000"
ProxyRemote "http://0.0.0.0:8000"
SetHandler "http://0.0.0.0:8000"
</Location>
</VirtualHost>
第三次尝试,
<VirtualHost *:80>
<Proxy "*">
ProxyPass "http://0.0.0.0:8000"
ProxyPassReverse "http://0.0.0.0:8000"
ProxyRemote "http://0.0.0.0:8000"
SetHandler "http://0.0.0.0:8000"
</Proxy "*">
</VirtualHost>
我已经尝试了所有这些,我删除、添加和更改了路由和命令。有些会报错,比如ProxyPass 不能在<Proxy "*"> 中使用正则表达式,ProxyRemote 不能在<Location> 中使用,ProxyPassReverse 不能使用正则表达式。而且都没有用。
我希望它可以将连接转发到 nodejs http 服务器以获取 *.njs 文件。我想使用 Apache 作为我的主服务器到服务器和转发,并且只需要 NodeJS 服务器来处理转发和响应请求。 NodeJS 足够好,没有问题。只有 Apache 需要一些设置。
我怎么能做到这一切?
【问题讨论】:
标签: apache reverse-proxy