V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zrp1994
V2EX  ›  Node.js

有没有办法用 Node 实现本地和远程双重代理?

  •  
  •   zrp1994 · 2015-08-08 15:57:31 +08:00 · 3169 次点击
    这是一个创建于 3399 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题是这样的:
    现在远程有一些代理服务器,然后本地也有一个透明代理服务器,用来在获取服务器列表之后根据需要把代理到本地的http/https转发到相应的远程代理服务器上。

    http协议很好实现:
    js
    var http = require('http'),
    op = {
    host: '127.0.0.1',
    port: 8087,
    method: 'GET',
    path: 'http://v2ex.com
    }
    var req = http.request(op, function (res) {
    res.on('data', function (chunk) {
    console.log('BODY:' + chunk);
    });
    });
    req.on('error', function (e) {
    console.log('Error got: ' + e.message);
    });
    req.end();

    然后外面包裹一个http.createServer就可以实现本地代理了。

    但是https就比较头疼。首先,如果使用https.createServer作为本地代理需要使用自签名证书,而且我在生成证书之后Chrome访问本地代理时总是提示证书无效(我已经添加了系统的根证书)。其次因为只是透明代理,不需要修改请求,所以我想到了更底层一点的做法:使用net.createServer监听所有的http和https,然后转发。然而问题是我如何将https请求转发到远程https代理上,而且能够很好地处理证书的问题呢?

    大家有没有什么想法…

    1 条回复    2015-08-08 17:49:06 +08:00
    zhjits
        1
    zhjits  
       2015-08-08 17:49:06 +08:00
    SNI 代理?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3326 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:05 · PVG 08:05 · LAX 16:05 · JFK 19:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.