2017-04-13 61 views
0

所有,UNABLE_TO_VERIFY_LEAF_SIGNATURE同时使用HTTP代理的节点

我想创建一个简单的代理,其所有的请求转发verbatum到另一台服务器。为此,我使用“http-proxy”npm。我正在尝试从本地到云服务器。起初,当我设置http代理时,我看到一个错误“无法验证第一个证书”。在网上进行了一些调查后,我发现这可能与我拥有自签名证书的事实有关。由于它是自签名的,因此它不在证书存储区中,因此无法验证。但是,因为在开发过程中我不需要这个,所以我添加了“secure:false”来忽略证书验证。我知道这是不安全的生产,但我现在只是想解决这个问题。这个更新实际上解决了这个错误。

现在,我收到另一个错误“UNABLE_TO_VERIFY_LEAF_SIGNATURE”。

任何人都可以帮我弄清楚如何摆脱这个错误?我尝试加入: process.env ['NODE_TLS_REJECT_UNAUTHORIZED'] ='0'

但是,仍然显示错误。我看到由http-proxy发出的事件中的错误(请参阅下面的代码以了解此事件)。如果我伊特诺钻到 'proxyRes' 我可以在proxyRes看到这个错误 - >连接 - > authorizationError - > UNABLE_TO_VERIFY_LEAF_SIGNATURE

这里是我下面的代码:

'use strict' 
require('dotenv').config({silent: true}) 
var util = require('util'); 
const loggerFactory = require('./utils/logger') 
const express = require('express') 
const defaultRouter = require('./routes/default') 
var logger = loggerFactory.consoleLogger 
const proxy = require('http-proxy'); 

module.exports = (config) => { 
const app = express() 
// app.use(loggerFactory.requestLogger()) 
app.set('json spaces', 2) 
app.set('port', config.express.port) 

app.use('', defaultRouter) 

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0' 
var apiProxy = proxy.createProxyServer({}); 
var proxyUrl = process.env.HOMEINSPECTIONSERVER_URL; 

app.use((req,res,next) => { 
apiProxy.web(req, res, 
    { 
     target: proxyUrl, 
     secure: false, 
    } 
); 

apiProxy.on('error', function(e) { 
    logger.error("Error during proxy call!") 
    logger.error("This is the error : " + e) 
    next('route') 
}); 

apiProxy.on('proxyReq', function(proxyReq, req, res, options) { 
    logger.info("---REQUEST---") 
    console.log("---REQUEST---") 
    // logger.info(util.inspect(proxyReq)) 
    proxyReq.setHeader('X-Special-Proxy-Header', 'foobar'); 
}); 

apiProxy.on('proxyRes', function (proxyRes, req, res) { 
    // logger.info("---RESPONSE---") 
    // logger.info(util.inspect(proxyRes)) 
    // logger.info("---RESPONSEEND---") 
    logger.info('RAW Response from the target', 
JSON.stringify(proxyRes.headers, true, 2)); 
}); 

apiProxy.on('open', function (proxySocket) { 
    proxySocket.on('data', hybiParseAndLogMessage); 
}); 

apiProxy.on('close', function (res, socket, head) { 
    console.log('Client disconnected'); 
}); 

apiProxy.on('start', function (req, res, target) { 
    // console.log('Started Request!'); 
}); 
}) 

app.use((req, res) => { 
// logger.info('starting request...') 
res.json(res.locals.standardResponse) 
}) 
app.use((err, req, res, next) => { 
var statusCode = 500 

if (res.locals.standardResponse) { 
    res.locals.standardResponse.error = err 
    statusCode = err.statusCode || 600 
    logger.error(err) 
    res.status(statusCode).json(res.locals.standardResponse) 
} 

if (err.error !== undefined && err.error.httpStatus !== undefined) { 
    statusCode = err.error.httpStatus 
} else { 
    statusCode = err.statusCode || 600 
} 

logger.error(err) 
res.status(statusCode).json(res.body) 
}) 

return app 

}

回答

0

对于任何上面也有这个问题。我使用名为express-http-proxy的npm软件包解决了这个问题。你可以在这里得到它:

enter link description here

所以我的代码现在看起来像这样:

'use strict' 
require('dotenv').config({silent: true}) 
const loggerFactory = require('./utils/logger') 
const express = require('express') 
const defaultRouter = require('./routes/default') 
var logger = loggerFactory.consoleLogger 

module.exports = (config) => { 
    process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0' 

    const app = express() 
    app.set('json spaces', 2) 
    app.set('port', config.express.port) 
    app.use('', defaultRouter) 
    var proxy = require('express-http-proxy'); 
    app.use(proxy(process.env.HOMEINSPECTIONSERVER_URL)) 

    return app 
} 

注意代码的重要部分的位置:

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0' 

希望帮助人谁卡住了!

相关问题