web-dev-qa-db-ja.com

HTTPとWebソケットの両方のトラフィックにポート80を使用することは可能ですか?

  1. リアルタイム通信を提供するために、Webソケット(技術的にはFlashソケット)を使用するサイトを構築しています。
  2. ポート80以外をすべてブロックする企業/学術ファイアウォールの背後にいる人々をサポートできるようにしたい
  3. 1台のマシンでサイトを実行できるようにしたい

以前は、いくつかのpython WebSocketソケットのリッスンと組み合わせて、HTTPサービングにApacheを使用してきましたが、ここでは明らかに機能しません。

私はいつでもwebsocketのものを別のサーバーに移動できますが、2番目のVPSにお金を払うのは避けたいです(ローカルではなくネットワーク経由でデータベースと通信する必要があります)。これを行う良い方法はありますか(nodejs、nginx、..?)、または頭痛の種ではありませんか?

30
Ender
7
jgauffin

はい、 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(){...});
})
15
Detect

もちろん、これを行うことができます。

まず、Apacheのバージョンを確認する必要があります。 2.4+バージョンが必要です。 Ubuntu 14.4で私のサーバーのコマンドを表示します。

次に、必要なApacheモジュールをオンにします。

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel

ドメインのオープン設定。私の場合はファイルへのパスでした。

/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

楽しんで!

5
EliaszKubala

安全なウェブソケットのために、私がしなければならないことは、これらの3行を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>

そしてmod_proxy_wstunnel Apacheモジュールを有効にします(私はApache 2.4.10を実行しています):

a2enmod proxy_wstunnel
1
Teriblus

Javaサーバーがオプションの場合、GlassFish(およびグリズリー)は同じポートでHTTPとwebsocketsの両方のトラフィックをサポートします。

0
cheeser