Node.js - Хороший WebServer с поддержкой проксирования WebSocket и поддержкой SSL? - PullRequest
4 голосов
/ 19 апреля 2011

Мне очень нравится node.js, но это очень сложно, когда вы хотите запустить несколько серверов веб-сокетов и сделать их все доступными через порт 80.

В настоящее время я использую nginx, но проксирую входящие соединения веб-сокетовна разных серверах веб-сокетов в зависимости от URL невозможно, потому что nginx не поддерживает http 1.1.

Я пытался реализовать веб-сервер, который имеет свою функциональность самостоятельно, но это действительно сложно, когда дело доходит допередача заголовка и т. д. Еще одна вещь - поддержка SSL.Поддержать его нелегко.

Итак, кто-нибудь знает хорошее решение для того, что я упомянул?

Спасибо за любую помощь!

Ответы [ 2 ]

8 голосов
/ 19 апреля 2011

У меня были хорошие результаты при использовании node-http-proxy от nodejitsu.Как указано в их readme, они, похоже, поддерживают WebSockets.

Пример для WebSockets (взят из их GitHub readme):

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

//
// Create an instance of node-http-proxy
//
var proxy = new httpProxy.HttpProxy();

var server = http.createServer(function (req, res) {
  //
  // Proxy normal HTTP requests
  //
  proxy.proxyRequest(req, res, {
    host: 'localhost',
    port: 8000
  })
});

server.on('upgrade', function(req, socket, head) {
  //
  // Proxy websocket requests too
  //
  proxy.proxyWebSocketRequest(req, socket, head, {
    host: 'localhost',
    port: 8000
  });
});

Его производственное использование не должно быть проблемой, поскольку оно используется для nodejitsu.com .Чтобы запустить прокси-приложение в качестве демона, рассмотрите возможность использования forever .

1 голос
/ 31 декабря 2011

Более новые версии nginx фактически поддерживают обратное проксирование для http / 1.1.Возможно, вам нужна версия 1.1.7 или выше.

Попробуйте что-то подобное в вашей конфигурации:

location / {
    chunked_transfer_encoding off;
    proxy_http_version 1.1;
    proxy_pass        http://localhost:9001;
    proxy_buffering   off;
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  Host $host:9001;  #probaby need to change this
    proxy_set_header  Connection "Upgrade"; 
    proxy_set_header  Upgrade websocket;
}

Приятно то, что вы можете прекратить SSL на nginx.

...