По сути, под http-proxy npm находятся некоторые сетевые библиотеки, которые использует Node (в частности, http://nodejs.org/api/https.html и TLS). Несмотря на то, что мой Apache смог просто подключить меня к самозаверяющему сертификату без прокси-сервера, получив доступ к нему в моем браузере:
https://localhost:8002
Вам необходимо установить центр сертификации, чтобы обойти ошибку «невозможно проверить листовую подпись» в узле (я использовал параметр SSLCACertificateFile). Затем вы получите «self_signed_cert_in_chain». Это привело к тому, что некоторые результаты Google показали, что npm отказались от самозаверяющих сертификатов, но я почти уверен, что это не касается Node.
В итоге некоторые люди указывают, что вы используете process.env.NODE_TLS_REJECT_UNAUTHORIZED или rejectUnauthorized в своем https-агенте. Если вы покопаетесь в источнике http-proxy, вы обнаружите, что он принимает опцию агента. Использовать это:
/**
* Module dependencies
*/
// basic includes
express = require('express');
fs = require('fs');
http = require('http');
https = require('https');
httpProxy = require('http-proxy');
require('child_process').spawn(__dirname+'/../../../dependencies/apache/bin/httpd.exe',['-f',__dirname+'/../../../dependencies/apache/conf/httpd-payments.conf']);
var app = module.exports = express();
app.set('port', process.env.PORT || 8001); // we sometimes change the port
// creates an output object for this particular request
//app.use(express.cookieParser(''));
//app.use(express.bodyParser());
//app.use(express.methodOverride());
proxy = httpProxy.createProxyServer();
proxy.on('error', function (err, req, res) {
console.log(err);
res.send(500,err);
res.end();
});
app.all('*',function(req,res,next) {
var options = {
hostname: '127.0.0.1',
port: 8002,
rejectUnauthorized: false,
key: fs.readFileSync(__dirname+"/../../../deployment/server.key.pem"),
cert: fs.readFileSync(__dirname+"/../../../deployment/server.crt.pem")
};
agent = new https.Agent(options);
try {
proxy.web(req,res, {
target: "https://localhost:8002",
proxyTimeout: 30,
agent: agent
});
} catch(e) {
// 500 error
res.send(500,e);
}
})
/**
* Start Server
*/
var options = {
key: fs.readFileSync(__dirname+"/../../../deployment/server.key.pem"),
cert: fs.readFileSync(__dirname+"/../../../deployment/server.crt.pem")
};
server = https.createServer(options,app).listen(app.get('port'), function () {
console.log('Running payments server on port ' + app.get('port'));
});
person
mikewhit
schedule
10.10.2014