首页 > 解决方案 > 可以使用 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 中的“代理通行证”等价物。任何帮助,将不胜感激!谢谢!

标签: node.jsnginxwebsocketproxygtk3

解决方案


推荐阅读