Nodejs代理到另一个端口 [英] Nodejs proxy to another port

查看:74
本文介绍了Nodejs代理到另一个端口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的服务器上运行一个节点进程.

I want to run a node process on my server.

http://mysite.me:80/ 的请求应该转到 http://localhost:8000

Requests to http://mysite.me:80/ should go to http://localhost:8000

http://mysite.me:80/xxx 的请求应该转到 http://localhost:8001

Requests to http://mysite.me:80/xxx should go to http://localhost:8001

我曾经做过类似的事情:

I used to do something like:

httpProxy = require('http-proxy');
var options = {
    router: {
        'mysite.me': 'localhost:8000',
        'mysite.me/xxx': 'localhost:8001'
    }
};
httpProxy.createServer(options).listen(80)

但我知道路由器"现在已被弃用.

But I understand 'router' is now deprecated.

我已经在这里呆了几个小时了!

I've been at this for hours!

推荐答案

好的,我搞定了...

修改 apache2 使其只监听环回接口:

Modify apache2 so it only listens on loopback interface:

vim/etc/apache2/ports.conf

将听 80"更改为听 127.0.0.1:80"

Change "Listen 80" to "Listen 127.0.0.1:80"

让您的 socket.io 服务器(server.js")监听端口 8001:

Have your socket.io server ("server.js") listening on port 8001:

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(8001);

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  /*socket.on('my other event', function (data) {
    console.log(data);
  });*/
});

node server.js

现在你需要一个代理(proxy.js")监听你的公共接口(x.x.x.x:80)

Now you need a proxy ("proxy.js") listening on your public interface (x.x.x.x:80)

它会根据需要在 apache2 和 socket.io 之间分配流量

It splits traffic between apache2 and socket.io as appropriate

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

var routes = [
  'http://127.0.0.1:80',
  'http://127.0.0.1:8001'
];

var proxy = new httpProxy.createProxyServer({});

var proxyServer = http.createServer(function (req, res) {
    var route=0;
    var split1=req.url.split('/');
    if (split1.length>0) {
        if(split1[1]=="socket.io"){   //requests to "socket.io" get tapped off to nodejs
            route=1;
        }
    }

    proxy.web(req, res, {target: routes[route]});
});
proxyServer.on('upgrade', function (req, socket, head) {
    proxy.ws(req, socket, head, {target: routes[1]});
});
proxyServer.listen(80,"x.x.x.x");
//proxyServer.listen(80,"ip:v6:address");   //optional...

sudo node proxy.js

这是网页的 HTML/jQuery:

And here's the HTML/jQuery for the web page:

<script src="./lib/socket.io/socket.io-1.1.0.js"></script>
<script>
$(document).ready(function(){
    var socket = io.connect('http://www.mysite.me:80');   //where mysite.me resolves to x.x.x.x
    socket.on('news', function (data) {
        console.log(data);
        socket.emit('my other event', { my: 'data' });
    });
});
</script>

现在我需要一种方法来弄清楚如何确保 proxy.js 不会崩溃并且是锤子证明!

Now I need a way to figure out how to make sure proxy.js doesn't go down and is hammer proof!

这篇关于Nodejs代理到另一个端口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆