node.js - 可以使用 NGINX 反向代理 GTK Broadway 服务器,但不能使用 node-http-proxy
问题描述
我在 GTK 中有一个 GUI,我正在使用 GTK 内置的 HTML5 后端 Broadway 在我的 Web 浏览器中运行。 https://developer.gnome.org/gtk3/stable/gtk-broadway.html 我可以在 8081 端口上查看,如下所示:
broadwayd :1
然后如果我使用 localhost:8081 作为我的 URL,我在 GTK 中制作的任何 GUI 都会显示在我的浏览器中。大局,我将使用 Jupyterhub 在浏览器中生成这个 GUI。Jupyterhub 使用 Node 的可配置的 http-proxy 包(它只是 node-http-proxy 的包装)来创建反向代理,以便可以在 my.ip.address/user/paul 访问 GUI。当我尝试这样做时,一些 HTML 似乎可以通过(我看到浏览器选项卡上列出了 Broadway),但 Firefox 控制台告诉我有400 websocket 错误,我永远无法显示 GUI。
我以前在反向代理中使用 NGINX 进行过这项工作。这是一个工作配置,它将使用端口 8081 上的百老汇服务器,并让我在浏览器中的端口 8015 上查看它:
events {}
http {
upstream websocket {
server 127.0.0.1:8081;
}
server {
listen 8015;
location / {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
}
我不确定如何制作相同的节点代码来执行此操作。这是我的尝试(给出 400 websocket 错误):
var util = require('util'),
http = require('http'),
httpProxy = require('../../lib/http-proxy');
var proxy = new httpProxy.createProxyServer({
ws: true
});
var proxyServer = http.createServer();
proxyServer.on('request', function (req,response) {
console.log('received a request');
proxy.web(req, response , {target: 'http://0.0.0.0:8081'});
});
proxyServer.on('upgrade', function (req, socket,head) {
console.log('received a ws request');
proxy.ws(req, socket, head,{target: 'http://0.0.0.0:8081'});
});
proxyServer.listen(8015);
我认为我不理解 Node 中的“代理通行证”等价物。任何帮助,将不胜感激!谢谢!
解决方案
推荐阅读
- python - 如何在python中合并具有相同键的嵌套字典
- azure-data-factory - 处理数据工厂中的动态 JSON 字段名称
- python-3.x - 没有名为“allennlp.data.tokenizers.word_splitter”的模块
- string - 在 Rust 中将任何类型转换为字符串
- javascript - 让场景three.js移动
- ios - 创建新的模拟器命令行-无效的运行时:com.apple.CoreSimulator.SimRuntime.iOS-13
- r - 如何在ggplot中绘制一条斜线并将文本平行放在上面?
- php - Laravel 8:试图获得非对象的属性“率”
- java - java - 如何在java中使用supercsv将特定列写入新的csv文件
- mongodb - 使用 mongoose 对嵌入文档进行排序