Node.js和Wordpress的Apache代理在相同的“域”上但路径不同

时间:2015-12-11 08:28:32

标签: node.js wordpress apache express mod-proxy

情况就是这样。 我在我的主域名上运行了一个Wordpress网站,说http://www.example.com

服务器上已启用

.htaccess,我正在使用Wordpress固定链接生成漂亮的网址。

现在我在Node.js(Express)中有另一个应用程序,它已部署在同一台服务器上,并在端口号3000上运行。因此,如果我放http://www.example.com:3000它会触发我的Expressjs应用程序。它运行完美无瑕。

我想要的是在同一个域的特定路径上运行Node.js应用程序。例如,如果我点击,http://www.example.com/node它应该将用户带到我的Node.js应用程序,如果我使用Apache mod_proxy它会很好。但这仅适用于我的Expressjs路由器的/路由。 但我也有其他一些路线,例如/subscribe/confirm,但都不起作用。 以下是我的Apache配置,我尝试通过提供多个ProxyPass指令来完成工作,但它不起作用。

ProxyPass /node http://127.0.0.1:3000/
ProxyPassReverse /node http://127.0.0.1:3000/
ProxyPass /node/subscribe http://127.0.0.1:3000/subscribe
ProxyPassReverse /node/subscribe http://127.0.0.1:3000/subscribe

Express路由器非常基本,使用以下应用配置:

var router  = express.Router();
app.use("/",router);

router.get("/",function(req,res){
   res.sendFile(templatepath + "index.html");
});

router.get("/subscribe",function(req,res){
   res.sendFile(templatepath + "subscribe.html");
});

router.get("*",function(req,res){
   res.sendFile(templatepath + "404.html");
});

当我尝试加载http://www.example.com/node/subscribe时,只需加载*路线并显示404.html模板。

1 个答案:

答案 0 :(得分:1)

最后通过修改Apache配置文件使其工作如下:

ProxyPreserveHost On
RewriteEngine On
ProxyPass ^/node/(.*) http://127.0.0.1:3000/$1 [P,L]
ProxyPassReverse /node/ http://127.0.0.1:3000/