首页 > 解决方案 > ExpressJS 和 Apache:子路由不起作用

问题描述

让我假设基本路由 可以正常工作,下面列出的每个文件都放在网站的根文件夹中。

router.js的结构如下:

const express = require("express");
const router = express.Router();

router.get("/", (req, res) => {
  res.send({ response: "Server is up and running good." }).status(200);
});


router.get("/user", (req, res) => {
  res.send({ response: "subroute" }).status(200);
});


router.post('/', (req, res) => {
  res.send({ response: 'true' })
})

module.exports = router;

然后当然,在index.js(主文件)我指示app上面use的路由器

const router = require('./router');
app.use('/', router);

Apache2 VirtualHost配置上,我有以下代理配置:

ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
   Require all granted
</Proxy>
ProxyPass / https://127.0.0.1:8443
ProxyPassReverse / https://127.0.0.1:8443

正如标题所说,问题在于子路由 ( /user) 不起作用,而是抛出502 Bad Gateway错误。但是,基本路由上的POSTGET可以正常工作。/

标签: node.jsapacheexpressproxy

解决方案


有趣的是,问题变成了——正如我所相信的——ProxyPassProxyPassReverse指令。

具体来说,您需要在目标主机的末尾添加一个斜杠

错误的配置:

ProxyPass / https://127.0.0.1:8443
ProxyPassReverse / https://127.0.0.1:8443

有效配置:

ProxyPass / https://127.0.0.1:8443/
ProxyPassReverse / https://127.0.0.1:8443/

推荐阅读