我正在尝试使用Node.js中的node-http-proxy创建一个代理,用于检查请求是否在mongodb中被授权.
基本上,我为node-http-proxy创建了一个中间件模块,我使用如下:
httpProxy.createServer(
require('./example-middleware')(),
9005, 'localhost'
).listen(8005)
Run Code Online (Sandbox Code Playgroud)
中间件模块的作用是使用mongojs连接到mongodb并运行查询以查看用户是否有权访问资源:
module.exports = function(){
// Do something when first loaded!
console.log("Middleware loaded!");
return function (req, res, next) {
var record = extractCredentials(req);
var query = -- Db query --
//Debug:
log("Query result", query);
db.authList.find(query).sort({
"url.len": -1
}, function(err, docs){
console.log(docs);
// Return the creator for the longest matching path:
if(docs.length > 0) {
console.log("User confirmed!");
next();
} else {
console.log("User not confirmed!");
res.writeHead(403, {
'Content-Type': 'text/plain'
});
res.write('You are not allowed to access …Run Code Online (Sandbox Code Playgroud) 我需要能够在应用程序级别上平衡websocket.让我们说基于我收到的消息转发websocket请求,在代理上解码然后使用某些逻辑将该数据发送到另一个套接字服务器.
但我无法做到这一点.这是我编写的初始代码并尝试这样做.这是服务器
var http = require('http');
var httpProxy = require('http-proxy');
var WebSocket = require('ws');
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('something');
});
var proxy = httpProxy.createServer({target: 'ws://localhost:8080', ws:true});
var server = httpProxy.createServer(function(req, res) {
//SOME LOGIC HERE TO PARSE WS DATA AND SEND TO WS SERVER
proxy.ws(req, res, { target: 'ws://localhost:8080'});
}).listen(8014);
Run Code Online (Sandbox Code Playgroud)
客户
var http = require('http');
var httpProxy = require('http-proxy');
var …Run Code Online (Sandbox Code Playgroud) 如何查看由所使用的代理处理的所有请求和响应的详细日志create-react-app?
我不仅要记录一些端点。相反,我想看到的一切,尽可能详细越好,这是怎么回事通过代理。
原因是我从AWS API Gateway服务器收到了403错误,但无法通过浏览器,curl等重现该问题。因此,我想了解通过网络传输的实际标头和内容,看看我的问题是否可能与代理相关。
node-http-proxy aws-api-gateway create-react-app http-proxy-middleware aws-amplify
有人可以帮助我了解初始连接前数百毫秒内发生的事情吗?
它只发生在每个其他请求上,如图所示。
请求是针对 ASP.NET Core Web 应用程序对 localhost 上的相同资源发出的 POST。
我也看过其他类似的问题和答案,但我没有看到在初始连接之前什么都没有的例子。其他人似乎都有一个“停顿”或“排队”的酒吧。
“短”请求如下所示:
Chrome 版本:74.0.3729.131(官方版本)(64 位)
更新 1:这在 Microsoft Edge 中不会发生。每个请求都很短。不用等。
更新 2:下载一个长请求的 HAR 文件显示一个很长的“连接”时间:
"timings": {
"blocked": 1.135999995024409,
"dns": 0.0030000000000000027,
"ssl": -1,
"connect": 301.202,
"send": 0.18900000000002137,
"wait": 79.29900000206612,
"receive": 3.750999996555038,
"_blocked_queueing": 0.8449999950244091
},
Run Code Online (Sandbox Code Playgroud)
短的连接时间为 -1:
"timings": {
"blocked": 0.9680000060191378,
"dns": -1,
"ssl": -1,
"connect": -1,
"send": 0.091,
"wait": 50.74499999642931,
"receive": 2.582000000984408,
"_blocked_queueing": 0.8130000060191378
},
Run Code Online (Sandbox Code Playgroud)
但为什么?
更新 3:事实证明,这只发生在通过 webpack-dev-server 代理时。我也会添加那个标签。尽管如此,它仍然只发生在 Chrome 中。
更新 4:现在似乎是这种情况的摘要,使用时会出现该模式:
我正在探索使用node-http-proxy代理服务器,以便我可以让端口80上的代理服务器向端口8000上的应用服务器转发请求.但是,我有点困惑为什么这是个好主意这个设置究竟是什么能够防止安全问题.
note-http-proxy文档讨论了很多关于使用它作为向具有多个端口或IP地址的应用程序转发请求的方法.这显然非常有用,特别是对于基本的循环负载均衡器策略.但是,我们在一个端口上只有一个应用程序,因此我们无需执行此操作.
如果我们应该使用这个代理服务器有一个重要的安全原因,那么我很想知道它可以防范哪种类型的攻击.另外,我们正在使用socket.io,所以如果代理有一些东西可以帮助websocket服务器扩展,我也想了解它.我们无法确定如何运行我们的应用程序sudo(因为1024以下的所有端口都需要root访问权限),所以如果此时没有充分的理由使用代理服务器,我们只是要废弃.如果有人知道如何在没有root访问权限的端口80上使用代理服务器运行此应用程序,那么这也非常有用.谢谢!
这是我正在使用的模块版本:
$ npm list -g | grep proxy
??? http-proxy@0.10.0
Run Code Online (Sandbox Code Playgroud)
一个webservice调用我的机器,我的任务是根据请求主体的内容将请求代理到另一个URL和主机,并附加一个查询参数:
var http = require('http'),
httpProxy = require('http-proxy')
form2json = require('form2json');
httpProxy.createServer(function (req, res, proxy) {
// my custom logic
var fullBody = '';
req.on('data', function(chunk) {
// append the current chunk of data to the fullBody variable
fullBody += chunk.toString();
});
req.on('end', function() {
var jsonBody = form2json.decode(fullBody);
var payload = JSON.parse(jsonBody.payload);
req.url = '/my_couch_db/_design/ddoc_name/_update/my_handler?id="' + payload.id + '"';
// standard proxy stuff
proxy.proxyRequest(req, res, {
changeOrigin: true,
host: …Run Code Online (Sandbox Code Playgroud) 我使用以下代码,它的工作原理
proxy.web(req, res, {
changeOrigin: true,
target: 'http://' + hostname + ':' + port,
ws: true
});
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试以下时,我得到了错误,为什么?
proxy.web(req, res, {
target: {
host: 'http://' + hostname,
port: port
},
});
Run Code Online (Sandbox Code Playgroud) 我使用这个代码我想创建代理,所有应用程序调用端口3000将被"引导"到端口3002
var http = require('http'),
httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer();
http.createServer(function (req, res) {
proxy.web(req, res, {
target: 'http://localhost:3002'
});
}).listen(3000);
// Create target server
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2));
res.end();
}).listen(3002);
Run Code Online (Sandbox Code Playgroud)
现在,当我使用原始端口(3000)运行应用程序时,我在浏览器中看到了
请求成功代理到3002
当我将端口(在浏览器中)更改为3002时,我仍然收到 相同的消息,为什么?好吗?
我应该在第二个创建服务器中生产什么?我的意思是代替
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, …Run Code Online (Sandbox Code Playgroud)我使用以下链接的反向代理,目前我得到一些位置,我想更新它(位置),我该怎么办?
proxy.on('proxyRes', function (proxyRes, req, res) {
res.headers.location = 'http:/a/b/'
});
Run Code Online (Sandbox Code Playgroud)
我需要改变它,例如
res.headers.location ='http:/ c/d /'我将处理如何更改URL的逻辑,但我想知道如何更新它...
当代理的目标发出重定向(在本例中为 301)时,代理会将其转发给客户端。然后客户端被重定向到实际域并且不再使用代理。有没有办法防止这种重定向影响客户端?我希望代理遵循重定向,但我不希望客户端在遵循此重定向时离开代理。
示例案例:
假设我在fake-proxy.example. 将目标设置为服务器 ip,然后将主机设置为该服务器上的域时,代理会尝试通过http. 该域设置为将http流量重定向到https并发出 301 重定向到与https. 这个重定向被发送回客户端,客户端离开fake-proxy.example并进入实际域(为了这个问题,我们称之为real-domain.example)。我的配置:
var options = {
target: {
host: '1.1.1.1'
},
headers: {
host: 'real-domain.example'
},
autoRewrite: false,
hostRewrite: false,
protocalRewrite: false
};
Run Code Online (Sandbox Code Playgroud)
我感谢您的帮助!
node-http-proxy ×10
node.js ×8
proxy ×5
javascript ×3
aws-amplify ×1
express ×1
http-proxy ×1
nodejitsu ×1
redirect ×1
sockets ×1
web-services ×1