node.js http-proxy自定义路由

NZCoderGuy

我在尝试使用http-proxy路由到本地主机时遇到麻烦。

我正在使用IISNODE,但从控制台应用程序都无法正常工作。

例如,如果将“目标”设置为google,它也可以在此代码段中创建的local:9000上使用,但不适用于在本地IIS中运行的网站

有任何想法吗?

更新:现在发布的代码段对我有用,但是仍然缺少很多工作。

var port = process.env.PORT;

var http = require('http'),
    httpProxy = require('http-proxy'),
    url = require('url');

// http Server 
var proxy = new httpProxy.createServer({});

var httpServer = http.createServer(function (req, res) {

    console.log('request received: ' + req.path);    

    var target = 'http://myapp';

    if (!req.url.toString().startsWith('/')) {
        target = target + '/';
    }

    target = target + req.url;

    console.log('routing request to ' + target);

    var urlObj = url.parse(req.url);

    req.headers['host'] = urlObj.host;
    req.headers['url'] = urlObj.href;

    proxy.web(req, res, {
        host: urlObj.host,
        target: target,
        enable: { xforward: true }
    });

});

httpServer.listen(port);

String.prototype.endsWith = function (s) {
    return this.length >= s.length && this.substr(this.length - s.length) == s;
}

String.prototype.startsWith = function (str) {
    return this.indexOf(str) == 0;
};
杰克·B

我在iisnode外部测试了一个简单的节点http-proxy,它可以很好地将请求路由到任何站点,localhost iis或www。

但是在iisnode中,我也无法使其正常运行。请求标头并不完全相同,并且我们在命名管道上而不是tcp端口上运行,很难找到导致错误路由的原因。

例如,如果我们将req.url更改为“ /”,则它将请求发送到运行节点应用程序的同一域,而不是目标域。

一种可能的解决方案是使用IIS反向代理(使用ARR和URL重写)将请求转发到在TCP端口上独立运行的节点代理应用。

我已经对其进行了测试,并且效果很好。如果需要,我可以给出配置示例。

更新:这是我使用IIS反向代理和节点代理应用程序使其工作的方式。它不使用iisnode:

一个简单的节点proxyServer.js应用程序:

var http = require('http')
var httpProxy = require('http-proxy')

var proxy = httpProxy.createProxyServer({})

var server = require('http').createServer(function(req, res) {
  console.log(req.url)  
  proxy.web(req, res, { target: 'http://nodejs.org' })
}).listen(3000)

使用node.exe proxyServer.js运行它

在IIS中,我们需要在“应用程序请求路由”中激活ReverseProxy

IIS服务器-> ARR:

IIS服务器ARR

代理设置...:

ARR代理设置...

启用代理,如下所示:

像这样激活反向代理

然后,我在IIS中创建一个专用网站node.mydomain.com和该网站的重写规则:

<rule name="ReverseProxyInboundNodeProxy" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
        <add input="{CACHE_URL}" pattern="^(https?)://" />
    </conditions>
    <action type="Rewrite" url="{C:1}://localhost:3000/{R:1}" />
</rule>

这是一种“双重代理”解决方案,但它可以工作。我仍然无法使节点代理服务器通过iisnode运行。当然,您需要在IIS中安装ARR和URL Rewrite。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

node.js http-proxy自定义路由

来自分类Dev

node.js:如何以自定义格式HTTP获取和解码/编码响应

来自分类Dev

Node.js 和 express Rest api 来创建自定义字段路由

来自分类Dev

Node.js 中的 Heroku 自定义 DNS API 路由问题

来自分类Dev

Openshift上的自定义node.js版本

来自分类Dev

自定义函数成功响应/ node.js

来自分类Dev

从硬盘安装自定义Node.js模块

来自分类Dev

使用Node.js做自定义头像

来自分类Dev

将请求发布到Node-http-proxy Node.js时发生套接字挂断

来自分类Dev

codeigniter 2.1.4是否支持http方法自定义路由?

来自分类Dev

Node.js:在另一个自定义类中引用自定义类

来自分类Dev

Node JS TCP代理:使用Node JS设置HTTP隧道

来自分类Dev

Node JS TCP代理:使用Node JS设置HTTP隧道

来自分类Dev

使用 winston.js 和 node.js 自定义消息格式

来自分类Dev

node.js自定义事件:无法调用未定义的方法“ emit”

来自分类Dev

node.js自定义事件:无法调用未定义的方法“ emit”

来自分类Dev

/node_modules/http-proxy/lib/http-proxy/index.js:120; 错误:套接字挂断

来自分类Dev

Node.js HTTP服务器

来自分类Dev

Express (node.js) using HTTPS and HTTP

来自分类Dev

Node.js HTTP响应流

来自分类Dev

监视Node.js HTTP Server的命令

来自分类Dev

Node.js HTTP response streams

来自分类Dev

Node.js HTTP状态代码列表

来自分类Dev

Node JS上的HTTP请求回调

来自分类Dev

Node.js axios http请求循环

来自分类Dev

Node.js HTTP服务器

来自分类Dev

node.js http代理重定向

来自分类Dev

node.js 中的 Http.request

来自分类Dev

Node js http 请求:选项中的变量