将节点前向路径请求转发到另一台服务器

11

当前有一个运行节点服务器的网站,它处理所有example.com的请求。我在另一台独立的服务器(运行apache)上创建了一个完全独立的WordPress博客,并希望将其提供到路径example.com/blog下,该路径对应IP地址172.23.23.23。WordPress服务器不共享任何代码,也不知道除自己以外的任何东西的存在。

在node/express中,最好的方法是如何将所有请求转发到这种方式?此外,新的WordPress服务器的A/CNAME记录应指向什么?


请查看node.js服务于WordPress博客 - laggingreflex
有趣,我不知道那个存在,但并不是我正在寻找的。 - Maruf
2个回答

15

这个有效:以下是您需要在节点应用程序中放置的内容:

var express = require('express');
var app = module.exports = express();

var proxy = require('http-proxy').createProxyServer({
    host: 'http://your_blog.com',
    // port: 80
});
app.use('/blog', function(req, res, next) {
    proxy.web(req, res, {
        target: 'http://your_blog.com'
    }, next);
});

app.listen(80, function(){
    console.log('Listening!');
});

然后在您的WordPress应用程序中,您需要将网站URL设置为http://your_node_app.com/blog

注意:您可能已经拥有一个express应用程序,可能有一个body-parser中间件,这会导致错误并且通常与http-proxy中的POST请求不兼容

您可以在这些线程中找到一些解决方案,即1:将此代理放置在body-parser之前,或者2:使用connect-restreamer


使用您的建议,@laggingreflex,我有一个问题:https://stackoverflow.com/questions/55736094/node-js-proxy-unable-to-load-first-certificate - richardwhitney
@laggingreflex,如何读取代理请求的响应状态码和响应体? - Nadhas

12

已经工作并测试通过

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
app.use('*', createProxyMiddleware({target: 'https://yourdomain.com', changeOrigin: true}));
app.listen(3000);

首先安装以下内容

npm i -s express
npm i -s http-proxy-middleware

@maruf 请检查这个答案。 - Amr Ibrahim
我已将其制作成一个服务/ Docker https://github.com/nexys-system/fwd-request - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接