web-dev-qa-db-fra.com

Est-il possible d'utiliser le port 80 pour le trafic HTTP et Web Socket?

  1. Je construis un site qui utilise des sockets Web (techniquement flash) afin de fournir une communication en temps réel.
  2. Je veux pouvoir aider les personnes derrière des pare-feu d'entreprise/académiques qui bloquent tout sauf le port 80
  3. J'aimerais pouvoir exécuter le site d'une seule machine

Auparavant, j'utilise Apache pour servir HTTP combiné avec certains python J'écoute sur une prise à haute teneur pour la bande Websocket, mais cela ne fonctionnera évidemment pas ici.

Je peux toujours déplacer les choses de Websocket sur un serveur séparé, mais j'aimerais éviter de payer pour un deuxième VPS (et devez parler à la base de données sur le réseau au lieu de localement). Y a-t-il un bon moyen de le faire (Nodejs, Nginx, ..?) Ou ne vaut-il pas la mal à la tête?

30
Ender
7
jgauffin

Oui, en utilisant nœud.js . Express ou Connect pour la serveur de fichiers HTTP et socket.io pour la bande Websocket.

Exemple:

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

Bien sûr, vous pouvez le faire.

Tout d'abord, vous devez vérifier votre version Apache. Vous devriez avoir 2.4+ version. Je vais vous montrer votre commande pour mon serveur sur Ubuntu 14.4.

Deuxièmement, allumez les modules Apache nécessaires:

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel

Ouvrez Conf de votre domaine, dans mon cas, c'était un chemin de fichier:

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

Ensuite, appendez ce code

<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>

Finaly redémarrez votre Apache

service Apache2 restart

S'amuser!

5
EliaszKubala

Pour Secure Webocket, tout ce dont je devais faire était d'ajouter ces trois lignes à mon HTTPS Virthaualhost:

<VirtualHost *:443>

    [...https config...]

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

</VirtualHost>

Et activer le module mod_proxy_wstunnel Apache (je cours Apache 2.4.10):

a2enmod proxy_wstunnel
1
Teriblus

Glassfish (et Grizzly) prend en charge le trafic http et Webockets sur le même port si un Java Server est une option.

0
cheeser