gpt4 book ai didi

javascript - 使用node-http-proxy在同一子域下代理 Node 服务器和websocket服务器

转载 作者:太空宇宙 更新时间:2023-11-03 22:33:40 24 4
gpt4 key购买 nike

这是我的代理设置:

var express = require('express');
var vhost = require('vhost');
var proxy = require('http-proxy').createProxyServer();

var app = express();
var server = http.createServer(app);

// route api subdomain to port 2000
app.use(vhost('api.*.*', function(req, res) {
proxy.web(req, res, {target: 'http://localhost:2000'});
}));

// I need to get websocket requests to ws://api.example.com proxied port 4000
server.on('upgrade', function(req, socket, head) {
// proxy.ws seems like the right way to go, but how do I get this under the vhost?
proxy.ws(req, socket, head);
});

// everything else goes to port 3000
app.get('*', function(req, res) {
proxy.web(req, res, {target: 'http://localhost:3000'});
});

server.listen(80, function() {
console.log('Proxy listening on port 80.');
});

我是否需要深入了解 vhost 处理程序内的 req, res 对象来路由套接字请求?正确的做法是什么?

更新

不太漂亮,但我会尝试一下。

server.on('upgrade', function(req, socket, head) {
var host = req.headers.host;
var parts = host.split('.');
if (parts.length === 3 && parts[0] === 'api') {
proxy.ws(req, socket, head, {target: {target: 'http://localhost:2000'});
}
});

希望有一个更优雅的类似虚拟主机的解决方案。

最佳答案

事实证明就这么简单:

server.on('upgrade', vhost('api.*.*', function(req, socket, head) {
proxy.ws(req, socket, head);
}));

vhost 可以包裹在 upgrade 监听器中,就像它可以用作 http 请求的中间件一样。

关于javascript - 使用node-http-proxy在同一子域下代理 Node 服务器和websocket服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33206490/

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