Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

wowrudy's avatar

node socket.js not working with https

Hi, i want to make realtime application. i follow this guide https://laracasts.com/discuss/channels/general-discussion/step-by-step-guide-to-installing-socketio-and-broadcasting-events-with-laravel-51?page=1 and everything works on my server, but after activate ssl for my domain this not work

i got this error in my console Failed to load resource: Could not connect to the server.

how to solve that ?

0 likes
11 replies
willvincent's avatar

What's your server side javascript (nodejs) code look like?

wowrudy's avatar

server

var server = require('http').Server();
var io = require('socket.io')(server);
var Redis = require('ioredis');
var redis = new Redis();

redis.subscribe('app1-channel');

redis.on('message', function(channel, message) {
    message = JSON.parse(message);
    io.emit(channel + ':' + message.event, message.data);
});

server.listen(3000);

view

var socket = io.connect( '//'+window.location.hostname+':3000');

it's working if use http, but not working if i use https on my site

willvincent's avatar
Level 54

You need to require('https') and pass in your certificate keys and such.

Since https is not currently supported by your node server as implemented, it's not going to work when loading the page with https.

wowrudy's avatar

i update my server, and when i run node socket.js i got this error message

server

var https = require('https'),     
    fs =    require('fs');        

var options = {
    key:    fs.readFileSync('/etc/nginx/ssl/mydomain.com/12345/server.key'),
    cert:   fs.readFileSync('/etc/nginx/ssl/mydomain.com/12345/server.crt')
};

var server = https.createServer(options);
var io = require('socket.io')(server);
var Redis = require('ioredis');
var redis = new Redis();

redis.subscribe('app1-channel');

redis.on('message', function(channel, message) {
    message = JSON.parse(message);
    io.emit(channel + ':' + message.event, message.data);
    console.log(channel + ':' + message.event);
});

server.listen(3000);

error message

fs.js:584
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^

Error: EACCES: permission denied, open '/etc/nginx/ssl/mydomain.com/12345/server.key'
    at Error (native)
    at Object.fs.openSync (fs.js:584:18)
    at Object.fs.readFileSync (fs.js:431:33)
    at Object.<anonymous> (/home/forge/mydomain.com/socket.js:6:16)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:140:18)

i check permission

lrwxrwxrwx 1 root root   53 Feb 18 16:21 server.crt -> /etc/letsencrypt/live/mydomain.com/fullchain.pem
lrwxrwxrwx 1 root root   51 Feb 18 16:21 server.key -> /etc/letsencrypt/live/mydomain.com/privkey.pem
wowrudy's avatar

update : it's because file is owned by root, and i use user 'forge' i tried sudo node socket.js and working. but how to run this server without sudo ? because i want to run this with daemon using forge.laravel.com

willvincent's avatar

Change keyfile owner:

sudo chown forge /etc/nginx/ssl/mydomain.com/12345/server.key
sudo chown forge /etc/nginx/ssl/mydomain.com/12345/server.crt

Also ensure that the directories in that path are readable by the forge user.

1 like
goper_leo's avatar

@willvincent it is not working on my forge.server I have done this sudo chown forge /etc/nginx/ssl/mydomain.com/12345/server.key sudo chown forge /etc/nginx/ssl/mydomain.com/12345/server.crt

Please respond thanks. Ive been working this for 2 days.

Please or to participate in this conversation.