Node.js http-proxy 允许 HTTPS
Node.js http-proxy allow HTTPS
我有一个创建代理服务器的应用程序,当访问页面时 returns url 请求,但它仅适用于 http 网页以及当我尝试访问https 地址然后我在浏览器中得到 Secure Connection Failed
。
为了解决这个问题,我从 here 为 localhost:8080
生成了一个自签名证书,但仍然无法访问受保护的网页...
这是我的代码:
var httpProxy = require('http-proxy');
var fs = require('fs');
var proxy = httpProxy.createServer({
ssl: {
key: fs.readFileSync('ssl_key_8080.pem', 'utf8'),
cert: fs.readFileSync('ssl_cert_8080.pem', 'utf8')
},
target:'https://localhost:8080',
secure: true
});
proxy.listen(443);
var http = require('http');
http.createServer(function (req, res) {
var options = {
target: 'http://' + req.headers.host,
};
req.host = req.headers.host;
proxy.web(req, res, options, function(err){
console.log('err', err)
});
}).listen(8080);
proxy.on('proxyReq', function (proxyReq, req, res) {
console.log('request url', JSON.stringify(req.url, true, 2));
});
有什么我做的不对吗?我按照 http-proxy docs
的说明进行操作
问题是您有一个自签名证书,并且您在代理设置对象中使用安全标志,来自文档
You can activate the validation of a secure SSL certificate to the
target connection (avoid self signed certs), just set secure: true in
the options.
var proxy = httpProxy.createServer({
ssl: {
key: fs.readFileSync('ssl_key_8080.pem', 'utf8'),
cert: fs.readFileSync('ssl_cert_8080.pem', 'utf8')
},
target:'https://localhost:8080',
secure: true
});
如果删除安全标志,您的浏览器可能会收到一条错误消息,提示该路线不安全。
在您的代码上下文中。
var httpProxy = require('http-proxy');
var fs = require('fs');
var proxy = httpProxy.createServer({
ssl: {
key: fs.readFileSync('ssl_key_8080.pem', 'utf8'),
cert: fs.readFileSync('ssl_cert_8080.pem', 'utf8')
},
target:'https://localhost:8080'
});
proxy.listen(443);
var http = require('http');
http.createServer(function (req, res) {
var options = {
target: 'http://' + req.headers.host,
};
req.host = req.headers.host;
proxy.web(req, res, options, function(err){
console.log('err', err)
});
}).listen(8080);
proxy.on('proxyReq', function (proxyReq, req, res) {
console.log('request url', JSON.stringify(req.url, true, 2));
});
您应该使用 https 而不是 http
...
var http = require('https');
...
我有一个创建代理服务器的应用程序,当访问页面时 returns url 请求,但它仅适用于 http 网页以及当我尝试访问https 地址然后我在浏览器中得到 Secure Connection Failed
。
为了解决这个问题,我从 here 为 localhost:8080
生成了一个自签名证书,但仍然无法访问受保护的网页...
这是我的代码:
var httpProxy = require('http-proxy');
var fs = require('fs');
var proxy = httpProxy.createServer({
ssl: {
key: fs.readFileSync('ssl_key_8080.pem', 'utf8'),
cert: fs.readFileSync('ssl_cert_8080.pem', 'utf8')
},
target:'https://localhost:8080',
secure: true
});
proxy.listen(443);
var http = require('http');
http.createServer(function (req, res) {
var options = {
target: 'http://' + req.headers.host,
};
req.host = req.headers.host;
proxy.web(req, res, options, function(err){
console.log('err', err)
});
}).listen(8080);
proxy.on('proxyReq', function (proxyReq, req, res) {
console.log('request url', JSON.stringify(req.url, true, 2));
});
有什么我做的不对吗?我按照 http-proxy docs
的说明进行操作问题是您有一个自签名证书,并且您在代理设置对象中使用安全标志,来自文档
You can activate the validation of a secure SSL certificate to the target connection (avoid self signed certs), just set secure: true in the options.
var proxy = httpProxy.createServer({
ssl: {
key: fs.readFileSync('ssl_key_8080.pem', 'utf8'),
cert: fs.readFileSync('ssl_cert_8080.pem', 'utf8')
},
target:'https://localhost:8080',
secure: true
});
如果删除安全标志,您的浏览器可能会收到一条错误消息,提示该路线不安全。
在您的代码上下文中。
var httpProxy = require('http-proxy');
var fs = require('fs');
var proxy = httpProxy.createServer({
ssl: {
key: fs.readFileSync('ssl_key_8080.pem', 'utf8'),
cert: fs.readFileSync('ssl_cert_8080.pem', 'utf8')
},
target:'https://localhost:8080'
});
proxy.listen(443);
var http = require('http');
http.createServer(function (req, res) {
var options = {
target: 'http://' + req.headers.host,
};
req.host = req.headers.host;
proxy.web(req, res, options, function(err){
console.log('err', err)
});
}).listen(8080);
proxy.on('proxyReq', function (proxyReq, req, res) {
console.log('request url', JSON.stringify(req.url, true, 2));
});
您应该使用 https 而不是 http
...
var http = require('https');
...