Sous domaine vers serveur nodejs et socket.io

Par Nikola, il y a 9 ans


Javascript NodeJS

Salut !

J'aimerai utiliser un sous-domaine qui pointerai mon serveur nodejs pour faire un système de chat ou de discussion instantanée.
Que le visiteur se trouve bien sur chat.monsite.fr et non pas www.monsite.fr:PORT_DU_CHAT
J'utilise socket.io pour le chat.
C'est possible d'éviter d'afficher le port dans le js de mon site comme :
var socket = io('https://chat.monsite.fr'); à la place de :
var socket = io('https://www.monsite.fr:3005');

Je me suis tourné vers les proxy avec apache2, je n'y arrive pas trop, et vers node-http-proxy, non plus :(
Comment je pourrai faire ?

Je précise que j'utilise le port 443 pour mon site et donc mon sous-domaine. =)

Merci d'avance ;)

5 réponses

DariosDjimado, il y a 9 ans

Salut nikola, peux tu nous montrer le code que tu utilises côté serveur aavec avec http-proxy ? Parce que moi j'avais eu ce problème et avec http-proxy je l'ai resolu très facilement.

Nikola, il y a 9 ans

Salut,
Heuu, j'ai réussi avec une alternative :

<VirtualHost *:443> ServerAdmin admin@monsite.fr ServerName io.monsite.fr SSLEngine on SSLProxyEngine on SSLCertificateFile /home/private/ssl/webastro.crt SSLCertificateKeyFile /home/private/ssl/webastro.key SSLCertificateChainFile /home/private/ssl/webastro-int.crt RewriteEngine On RewriteCond %{REQUEST_URI} ^/socket.io [NC] RewriteCond %{QUERY_STRING} transport=websocket [NC] RewriteRule /(.*) wss://io.monsite.fr:1812/$1 [P,L] ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /socket.io/1/websocket wss://io.monsite.fr:1812/socket.io/1/websocket ProxyPassReverse /socket.io/1/websocket wss://io.monsite.fr:1812/socket.io/1/websocket ProxyPass /socket.io/ https://io.monsite.fr:1812/socket.io/ ProxyPassReverse /socket.io/ https://io.monsite.fr:1812/socket.io/ ProxyPass / https://io.monsite.fr:1812/ ProxyPassReverse / https://io.monsite.fr:1812/ </VirtualHost>

Mon serveur :

var fs = require('fs'), https = require('https'), path = require('path'), express = require('express'), app = express(), options = { key: fs.readFileSync(path.join(__dirname,'/../../private/ssl/key.key')), cert: fs.readFileSync(path.join(__dirname,'/../../private/ssl/cert.crt')), ca: fs.readFileSync(path.join(__dirname,'/../../private/ssl/cert-int.crt')) }, port = 1812, server = https.createServer(options,app).listen(port,function(){ console.log("Express server listening on port " + port); }), io = require('socket.io')(server); app.get('/',function (req,res){ res.redirect(301,'https://www.monsite.fr'); }); io.sockets.on('connection', function(socket){ socket.on('disconnect', function(){ }); });

Mais je ne sais pas si c'est de la bonne pratique

DariosDjimado, il y a 9 ans

La bonne pratique je n'en suis pas forcément certains. Mais à partir du moment où ça résout ton problème sans aucun risque en matière de sécurité c'est l'essentiel, après on peut parler des autres problèmes et tout... bah moi perso je n'avais pas vu comme ça et je ne trouve aaucun problème majeur dans le code donc cool.

Nikola, il y a 9 ans

J'ai regardé beaucoup sur le web, et c'est une technique qui existe, je n'ai pas de bug dans mes logs ;)

DariosDjimado, il y a 9 ans

Okay pas de problème ;)