【问题标题】:How can I suppress 301 redirects from the target with node-http-proxy?如何使用 node-http-proxy 抑制来自目标的 301 重定向?
【发布时间】:2023-03-12 19:24:01
【问题描述】:

当代理的目标发出重定向(在本例中为 301)时,代理会将其转发给客户端。然后客户端被重定向到实际域并且不再使用代理。有没有办法防止这种重定向影响客户端?我希望代理遵循重定向,但我不希望客户端在遵循此重定向时离开代理。

示例案例:

假设我有一个在 fake-proxy.example 上运行的代理。将目标设置为服务器 ip,然后将主机设置为该服务器上的域时,代理会尝试通过http 进行连接。该域设置为将http 流量重定向到https,并发出301 重定向到与https 相同的域。此重定向被发送回客户端,客户端离开fake-proxy.example 并进入实际域(为了这个问题,我们称之为real-domain.example)。我的配置:

var options = {
    target: {
        host: '1.1.1.1'
    },
    headers: {
        host: 'real-domain.example'
    },
    autoRewrite: false,
    hostRewrite: false,
    protocalRewrite: false
};

感谢您的帮助!

【问题讨论】:

  • 这个运气好吗?
  • 我也在为此而战。我希望它稳定。没有重定向到真实域..
  • 找到解决办法了吗?

标签: javascript node.js redirect proxy node-http-proxy


【解决方案1】:

对于寻找这个的其他人,http-proxy-middleware 有一个 followRedirects 选项

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');

const app = express();

const url = 'http://target-server'

app.use(
  '/login',
  createProxyMiddleware({
    target: url,
    pathRewrite: {
      [`^/login`]: '',
    },
    followRedirects: true,
  })
);

// Start the Proxy
app.listen('localhost', 3000);

【讨论】:

    【解决方案2】:

    有点晚了,但是像下面这样的解决方案可以帮助那些偶然发现这篇文章的人:

    var http = require('http');
    var url = require('url');
    var request = require('request');
    
    var host = 'http://real-domain.example';
    
    http.createServer(onRequest).listen(3080);
    
    function onRequest(req, res) {
        var url_parts = url.parse(req.url);
        request({
            url: host + url_parts.pathname
        }).on('error', function(e) {
            res.end(e);
        }).pipe(res);
    }
    

    当然,cookie 之类的东西不会被保留,我猜你可能会失去一些功能,但至少,它是稳定的,因为在 你不会被重定向出去您的代理域

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      相关资源
      最近更新 更多