Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Jupyterhub可配置Http代理问题_Node.js_Proxy_Node Http Proxy_Jupyter Notebook - Fatal编程技术网

Node.js Jupyterhub可配置Http代理问题

Node.js Jupyterhub可配置Http代理问题,node.js,proxy,node-http-proxy,jupyter-notebook,Node.js,Proxy,Node Http Proxy,Jupyter Notebook,我一直在使用Jupyterhub的可配置Http代理,并为代理添加了必要的选项,以处理客户端的ssl证书,而无需使用命令行选项 我的主要目标是接收客户端对代理的请求,并将其证书信息添加到头中。在标题中,我将使用jupyterhub的验证器创建用户名 我的问题是,当我使用http代理可用的proxy.on('proxyReq方法设置头时,我会遇到以下错误:[错误:发送头后无法设置头。] 我一直在代码中查找响应/请求的编写或发送位置,但找不到它 这是ConfigurableProxy函数代码,如果需

我一直在使用Jupyterhub的可配置Http代理,并为代理添加了必要的选项,以处理客户端的ssl证书,而无需使用命令行选项

我的主要目标是接收客户端对代理的请求,并将其证书信息添加到头中。在标题中,我将使用jupyterhub的验证器创建用户名

我的问题是,当我使用http代理可用的
proxy.on('proxyReq
方法设置头时,我会遇到以下错误:
[错误:发送头后无法设置头。]

我一直在代码中查找响应/请求的编写或发送位置,但找不到它

这是ConfigurableProxy函数代码,如果需要,我可以提供更多:

function ConfigurableProxy (options) {

var that = this;
this.options = options || {};
this.trie = new trie.URLTrie();
this.auth_token = this.options.auth_token;
this.includePrefix = options.includePrefix === undefined ? true : options.includePrefix;
this.routes = {};
this.host_routing = this.options.host_routing;
this.error_target = options.error_target;
if (this.error_target && this.error_target.slice(-1) !== '/') {
    this.error_target = this.error_target + '/'; // ensure trailing /
}
this.error_path = options.error_path || path.join(__dirname, 'error');

if (this.options.default_target) {
    this.add_route('/', {
        target: this.options.default_target
    });
}

options.ws = true;
options.secure= true;
// These are the ssl options

options.ssl = {
    //Right the key and cert are relative path on my computer
    //but these can be changed.
    key: fs.readFileSync('/Users/grantherman/Desktop/jupyterHubCSProject/ssl/server.key'),
    cert: fs.readFileSync('/Users/grantherman/Desktop/jupyterHubCSProject/ssl/server.crt'),
    requestCert: true,
    //Right now this is set to false, but if we add a CA to these options
    // and set this to true, the proxy will reject all unkown ssl certs
    rejectUnauthorized: false
};
var response = [];
var data = [];
var proxy = this.proxy = httpProxy.createProxyServer(options);

proxy.on('proxyReq', function(proxyReq, req, res, options) {
    console.log("proxy request");
    try{
  proxyReq.setHeader('X-Special-Proxy-Header', req.socket.getPeerCertificate());

  }catch(err){
    console.log(err);
    }

});

 proxy.on('data', function(data, req, res, options) {
  data.push(data);
  });

proxy.on('proxyRes', function(proxyRes, req, res, options) {
  response.push(proxyRes);
  });

proxy.on('error', function(error, req, res, options) {
    log.add(error);

});

proxy.on('close', function (req, socket, head) {
  // view disconnected websocket connections
  console.log('Client disconnected');
});


// tornado-style regex routing,
// because cross-language cargo-culting is always a good idea

this.api_handlers = [
    [ /^\/api\/routes(\/.*)?$/, {
        get : bound(this, authorized(this.get_routes)),
        post : json_handler(bound(this, authorized(this.post_routes))),
        'delete' : bound(this, authorized(this.delete_routes))
    } ]
];

我认为这需要修改可配置http代理本身。在启动代理请求之前,添加头的位置在原始
req
对象上

它看起来像:

ConfigurableProxy.prototype.handle_proxy = function (kind, req, res) {
    ...
    req.headers['X-My-Header'] = 'My-Value';
    // dispatch the actual method
    this.proxy[kind].apply(this.proxy, args);
在CHP中添加一个钩子来修改请求,应该可以在不修改CHP源的情况下实现