gpt4 book ai didi

node.js http-proxy 自定义路由

转载 作者:搜寻专家 更新时间:2023-11-01 00:08:15 25 4
gpt4 key购买 nike

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

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

例如,如果“target”设置为 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;
};

最佳答案

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

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

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

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

我已经测试过了,效果很好。如果需要,我可以提供配置示例。

更新:以下是我如何使用 IIS 反向代理和 Node 代理应用程序使其工作。虽然它不使用 iisnode:

一个简单的 Node 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 中,我们需要在 Application Request Routing 中激活 ReverseProxy:

IIS 服务器 -> ARR:

IIS Server ARR

代理设置...:

ARR Proxy settings...

像这样启用代理:

Activate reverse proxy like this

然后我在 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>

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

关于node.js http-proxy 自定义路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23857194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com