nodejs反向代理服务

const http = require('http');
const url = require('url');

//创建代理服务
function createProxyServer(host, listenPort,port) {
  const server = http.createServer((req, res) => {
    // 解析请求的 URL
    const parsedUrl = url.parse(req.url);

    // 获取请求的路径和查询参数
    const pathname = parsedUrl.pathname;
    const query = parsedUrl.search ? parsedUrl.search.slice(1) : null;

    // 构建代理请求的选项
    const options = {
      hostname: host, // 目标主机名
      port: port || 80, // 目标端口
      path: parsedUrl.path, // 请求路径
      method: req.method, // 请求方法
      headers: req.headers, // 请求头
    };

    // 发起代理请求
    const proxy = http.request(options, (targetRes) => {
      res.writeHead(targetRes.statusCode, targetRes.headers);
      targetRes.pipe(res);
    });

    req.pipe(proxy);
    // 处理代理请求的错误
    proxy.on('error', (err) => {
      console.error('Proxy error:', err);
      res.end();
    });

    // 读取目标响应的内容
    proxy.on('data', (chunk) => {
      console.log(`Proxy data: ${chunk}`);
    });
  });

  server.listen(listenPort, () => {
    console.log(`Proxy server listening on port ${port}`);
  });

  return server;
}

function closeProxyServer(server) {
  server.close();
}

// 创建反向代理服务器
const server = createProxyServer('www.runoob.com', 10086, 80);

// 在需要关闭服务器时调用 closeProxyServer 函数
closeProxyServer(server);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值