Подтвердить что ты не робот

Можно ли использовать порт 80 для трафика HTTP и веб-сокетов?

  • Я создаю сайт, который использует веб-сокеты (технически флеш-сокеты), чтобы обеспечить связь в режиме реального времени.
  • Я хочу иметь возможность поддерживать людей за корпоративными/академическими брандмауэрами, которые блокируют все, кроме порта 80
  • Я хотел бы иметь возможность запускать сайт с одной машины.

Раньше я использовал Apache для HTTP-сервиса в сочетании с некоторым python-прослушиванием сокета с высоким номером для материала websocket, но это, очевидно, не будет работать здесь.

Я всегда могу перенести материал websocket на отдельный сервер, но я бы хотел не платить за второй VPS (и вам нужно поговорить с базой данных по сети, а не локально). Есть ли хороший способ сделать это (nodejs, nginx,...?), Или это не стоит головной боли?

4b9b3361

Ответ 2

ДА, используя node.js. Express или connect для HTTP файла, обслуживающего и socket.io для материала WebSocket.

Пример:

var express = require("express");
var app = express.createServer(); 

app.get('/', function(req, res){ 
    res.redirect("/index.html");
}); 

app.configure(function(){
  app.use(express.static(__dirname + '/public'));
});

app.listen(80); 

var io = require('socket.io'); 
var socket = io.listen(app); 
socket.on('connection', function(client){ 
  client.on('message', function(){...});
})

Ответ 3

Конечно, вы можете это сделать.

Во-первых, вам нужно проверить версию Apache. У вас должна быть версия 2.4+. Я покажу вам команду для моего сервера на Ubuntu 14.4.

Во-вторых, включите необходимые модули apache:

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel

Откройте conf своего домена, в моем случае это был путь к файлу:

/etc/apache2/sites-available/myDomain.pl.conf

Затем добавьте этот код

<VirtualHost>

.
.
.

RewriteEngine on

RewriteCond %{QUERY_STRING} transport=polling
RewriteRule /(.*)$ http://localhost:3001/$1 [P]

ProxyRequests off
ProxyPass /socket.io ws://localhost:3001/socket.io
ProxyPassReverse /socket.io ws://localhost:3001/socket.io

ProxyPass        /socket.io http://localhost:3001/socket.io
ProxyPassReverse /socket.io http://localhost:3001/socket.io
</VirtualHost>

Завершить перезагрузку apache

service apache2 restart

Удачи!

Ответ 4

GlassFish (и grizzly) поддерживают трафик HTTP и websockets на том же порту, если java-сервер является опцией.

Ответ 5

Для тех, кто использует Django, Channels является ответом. Согласно сообществу, каналы будут официально выпущены в Django 1.10.

Мои причины попробовать каналы:

  • параметры для объединения http с serisice websocket
  • Проверка подлинности сеанса django доступна в службе websocket

Ответ 6

Для защищенного websocket все, что мне нужно было сделать, это добавить эти три строки в https virthualhost:

<VirtualHost *:443>

    [...https config...]

    SSLProxyEngine On
    ProxyPass "/web_socket"  "wss://localhost:7300/web_socket"
    ProxyPassReverse "/web_socket"  "wss://localhost:7300/web_socket"

</VirtualHost>

И включите модуль apache mod_proxy_wstunnel (я запускаю apache 2.4.10):

a2enmod proxy_wstunnel

Ответ 7

Короткий ответ - нет, потому что вы можете прослушивать только один процесс на одном порту. Вы можете попробовать использовать порт 443, так как это также не будет заблокировано, если вы также не используете https.