node-proxy与host:port一起使用,但不使用unix socket-path

时间:2012-05-29 02:19:43

标签: sockets node.js ubuntu vhosts

我想和node-proxy做一些vhost-jiggery-pokery。考虑到我有一个启动并运行的slave脚本,它会监听unix-socket:/tmp/node-http/cubixcraft.de 当我想使用以下脚本将其加载到我的node-proxy中时,它根本不起作用。网页没有回复。

var fs = require("fs"),
    httpProxy = require("http-proxy");

var options = {
    hostnameOnly: true,
    router: {
        "cubixcraft.de": "/tmp/node-http/cubixcraft.de"
    }
};

var proxyServer = httpProxy.createServer(options).listen(80);

当我使用普通端口而不是套接字路径时,一切正常。我甚至在成功完成的套接字路径上发出了一个get请求。这条路真的有效。节点代理似乎有问题。

有人遇到同样的问题吗?

2 个答案:

答案 0 :(得分:0)

我最近想做类似的事情,但根据这里的开放github问题http://github.com/nodejitsu/node-http-proxy/issues/104,这还不可能。

答案 1 :(得分:0)

作为zi42 pointed out,这种行为是一个错误。我深入研究了代码并发现,他们并不关心套接字。没有一行可以处理socketsPath s。

由于很长时间没有人对issue做出回应I fixed it myself。您可以找到结果here。这是一个包含socketPath的包装模块。我会制作一个pull request,以便socketPath很快就可以使用。

以下示例显示了如何使用它。我假设您有一个HTTP服务器正在侦听套接字“/tmp/node-http/myserver.com”。

var httpProxy = require("./fixed-http-proxy.js"); // This assumes that you have my .js in your cwd and http-proxy installed as a module (npm install http-proxy)

console.log(httpProxy);
var options = {
    hostnameOnly: true,
    router: {
        "myserver.com": "/tmp/node-http/myserver.com" // Sockets are determined by a leading slash
    }
};

var proxyServer = httpProxy.createServer(options).listen(80); // myserver.com:80 now internally proxies to /tmp/node-http/myserver.com