Tag: 节点 http proxy

使用现有套接字来请求http请求

我试图写一个express应用程序,通过SSH隧道代理HTTP请求。 软件包ssh2可以使用forwardOut()创build隧道。 它会创build一个连接到远程机器端口的stream。 我正在尝试通过此连接转发传入的HTTP请求。 我面临的问题是,每个代理库,甚至HTTP库发现创build一个新的套接字到主机,但我想使用来自forwardOut()而不是一个新的套接字的stream。 我可以尝试创build一个额外的服务器,通过隧道转发所有内容,但为每个请求创build额外的套接字听起来很hacky。 我希望有更好的办法。 有什么库支持使用HTTP请求现有的套接字/stream?

在node-http-proxy请求中设置date

我正在尝试创build一个节点http代理服务器,明确设置所有请求中传递的date。 任何人都可以请教我如何做到这一点。 即我想强制所有的HTTP请求传递的date是过去的date 在req.headers中设置date似乎不起作用: var http = require('http'), httpProxy = require('http-proxy'); var proxy = httpProxy.createProxyServer({}); var server = http.createServer(function(req, res) { console.log("Proxying: " + req.url); req.headers["Date"] = "Fri, 18 Dec 2015 08:49:37 GMT"; //req.headers["date"] = "Fri, 18 Dec 2015 08:49:37 GMT"; proxy.web(req, res, { target: 'http://somewhereElse.com:9090' }); }); console.log("listening on port 8888") server.listen(8888);

节点http-proxy:请求主体的asynchronous修改

我需要asynchronous修改请求主体。 一些沿着这条线: proxy.on('proxyReq', function(proxyReq, req, res, options) { if(req.body) { new Promise(function(resolve){ setTimeout(function() { // wait for the db to return 'use strict'; req.body.text += 'test'; let bodyData = JSON.stringify(req.body); proxyReq.setHeader('Content-Type','application/json'); proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData)); // stream the content proxyReq.write(bodyData); resolve(); },1); }); } }); 当我运行这个我得到的错误说,不能modfiy头一旦设置。 这是有道理的。 我如何才能停止发送请求,直到我准备好了? 我已经看过从proxyReq中删除各种监听器,但没有成功。

在Rediscallback中使用node.js http代理

考虑到这个不完整的片段: var util = require('util'), nconf = require('nconf'), http = require('http'), httpProxy = require('http-proxy'), express = require('express'), repoServer = express.createServer(), redis = require('redis'), redisClient = redis.createClient(); // (…) var proxy = new httpProxy.RoutingProxy(); http.createServer(function (req, res) { console.log("URL", req.url); if (req.url) { var token = req.url.split("/")[1]; // if I leave this code here it works […]

使用http-proxy进行负载均衡

我正在检查http-proxy模块 ,基本上我知道它在具有相同端口的两个不同主机之间切换。 所以这里的问题是在使用同一台主机的时候可能在两个不同的端口之间切换(例如,两台主机都是IP地址)?

使用Express的Nodejitsu上的HTTPS

好的。 我有一个应用程序快速也使用Socket.io,并通过HTTP工作正常。 但是,现在我必须转移到HTTPS。 Nodejitsu提供了很多这方面的文档。 他们build议使用node-http-proxy( https://github.com/nodejitsu/node-http-proxy )。 精细! 从HTTP的代码: var server = http.createServer(app) // app is an Express instance server.listen(config.port,config.hostip) // config.port is 80 for localhost and 3000 for Nodejitsu, config.hostip is 127.0.0.1 for localhost and 0.0.0.0 for Nodejitsu 我懂了: var server = http.createServer(app) var options = { https: { key: fs.readFileSync(__dirname+"/ssl/privatekey.pem", 'utf8'), cert: fs.readFileSync(__dirname+"/ssl/certificate.pem", […]

使用node-http-proxy访问响应头

我正在尝试使用node-http-proxy创build的代理来修改响应。 但是我无法访问响应头。 我想访问响应头,因为我想修改JavaScript文件并将修改的JavaScript文件发送到客户端。 这是我的代码: var httpProxy = require('http-proxy'); var url = require('url'); var i = 0; httpProxy.createServer(function(req, res, next) { var oldwriteHead = res.writeHead; res.writeHead = function(code, headers) { oldwriteHead.call(res, code, headers); console.log(headers); //this is undefined }; next(); }, function(req, res, proxy) { var urlObj = url.parse(req.url); req.headers.host = urlObj.host; req.url = urlObj.path; proxy.proxyRequest(req, res, […]

Express.js:反向代理不同的Web应用程序以及资产

我希望允许经过身份validation的Express客户端访问运行在服务器上但在不同端口上的其他Web应用程序。 例如,我已经明确运行在http://myDomain并且有另一个应用程序运行在端口9000 。 我希望能够通过http://myDomain/proxy/9000访问其他应用程序。 我使用node-http-proxy获得了一些成功,例如: function(req, res) { var stripped = req.url.split('/proxy')[1]; var path = stripped.split('/'); var port = path.shift(); var url = path.join('/'); req.url = url; proxy.web(req, res, { target: 'http://127.0.0.1:' + port }); } 然而,最大的问题是,当Web应用程序发出GET请求时,例如/js/lib.js ,它会parsing为http://myDomain/js/lib.js ,这是有问题的,因为express并不知道这些资产。 正确的请求将是http://myDomain/proxy/9000/js/lib.js 。 我如何路由所有这些额外的请求?

node.js http-proxy负载平衡

在我的学习期间,我必须通过http-proxy(模块)创build一个包含2个nodejs webserver和1个nodejs负载均衡器的nod​​ejs webserver环境。 因此,我build立了2个节点js侦听端口8081和8082的实例。示例服务器A(localhost:8081) var args = process.argv.splice(2); var http = require('http'); function whoareU() { var n = 'A'; return n; } var server = http.createServer(function (req, res) { res.writeHead(200, {'Content-Type' : 'text/plain'}); res.end('Server: ' + whoareU()); }); server.listen(args[0] || 8081); … ServerB是类似的,只是改变了端口8082和标识符B. 另一方面,我通过http-proxy侦听端口8080构build了一个“loadbalace”实例 var http = require('http'), httpProxy = require('http-proxy'); var servers = [{host […]

Node.js Express – 在代理请求之后调用next()

我正在编写Express.js应用程序,它应该将请求路由到某个代理服务器,作为pipe道中的最后一步。 我使用了http-proxy代理库,因为它支持websocket。 问题是我需要在redirect请求之后继续使用我的应用程序,以便收集一些我将用于logging的信息(响应时间,api调用等)。 这个想法是在代理请求被调用后调用next()函数,它应该返回到堆栈中的第一个中间件?(请纠正我,如果我错了),然后计算起点和当前的时间差。 调用proxy.web(req, res, {target: serviceAddress}); 和next()之后 – 我得到错误: _http_outgoing.js:335 throw new Error('Can\'t set headers after they are sent.'); ^ Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11) at d:\WebStorm Projects\api-gateway\node_modules\http-proxy\lib\http-proxy\passes\web-outgoing.js:85:11 at Array.forEach (native) at Array.writeHeaders (d:\WebStorm Projects\api-gateway\node_modules\http-proxy\lib\http-proxy\passes\web-outgoing.js:84:35) at ClientRequest.<anonymous> (d:\WebStorm Projects\api-gateway\node_modules\http-proxy\lib\http-proxy\passes\web-incoming.js:149:20) at ClientRequest.emit (events.js:107:17) at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:426:21) […]