Нужна помощь при загрузке не удалось для Socket.io.js - PullRequest
0 голосов
/ 28 мая 2018

Я только что получил свой ssl-сертификат от GoDaddy, и сейчас я работаю на веб-сайте в https://example.com, а мой socketio-сервер в http://example.com:3000 (он не может получить доступ к socketio в https)

Это сообщение об ошибке, которое я получаю из своей консоли

"Не удалось загрузить источник с именем" https://example.com:3000/socket.io/socket.io.js

Вот так я добавляю socket.io.js

<script src="<?php print BASE_URL; ?>:3000/socket.io/socket.io.js"></script>

Вот мой сервер nodejs с socket.io

var app = require('express')();
var cors = require('cors');
var https = require('https').Server(app);
var io = require('socket.io')(https);
var _ = require('lodash');

// more include files here ...

https.listen(3000, function() {
  utils.logger('Listening on *: 3000', 'info');
});

io.use(function(socket, next) {
  let found = _.findIndex(socketStore.connections, { 'userId': socket.request._query.userId });

if (parseInt(socket.request._query.userId) !== 0) {
  if (found < 0) {
    socketStore.connections.push({
      userId: parseInt(socket.request._query.userId),
      socket: socket
    });
  }
  else {
    socketStore.connections[found] = {
      userId: parseInt(socket.request._query.userId),
      socket: socket
    };
  }

  utils.logger(`User connected from ${socket.request.connection.remoteAddress}`, 'info');
  utils.logger(`User ${socket.request._query.userId} is now online!`, 'info');

    next();
  }
});

// Socket IO
io.on('connection', function(socket) {
    // some stuffs
});

app.use(cors({ origin: '*' }));

// Routes and Endpoints
app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

А вот мой apache ssl config по умолчанию

<IfModule mod_ssl.c>
  <VirtualHost _default_:443>
    ServerAdmin webmaster@example.com
    ServerName example.com

    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine on

    SSLCertificateFile /root/ssl/example.com.crt
    SSLCertificateKeyFile /root/ssl/example.com.key

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
      SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
      SSLOptions +StdEnvVars
    </Directory>
    <Directory "/var/www/html">
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      Allow from all
    </Directory>

  </VirtualHost>
</IfModule>

1 Ответ

0 голосов
/ 28 мая 2018

Ваше сообщение об ошибке:

"Ошибка загрузки для источника с именем" https://example.com:3000/socket.io/socket.io.js

пытается загрузить /socket.io/socket.io.js с сервера HTTPS, но отображается коддля сервера socket.io, использующего HTTP, а не HTTPS. Вы не показываете веб-страницу, с которой это происходит, но тег <script> для загрузки библиотеки socket.io.js должен быть таким жепротокол, который прослушивает ваш сервер socket.io.

Если у вас уже есть https-сервер, вам следует использовать его и для socket.io. Нет необходимости создавать отдельный http-сервер только дляsocket.io и, фактически, это плохая практика для доступа к http ресурсам со страницы https, потому что это обманывает / обманывает пользователя относительно безопасности страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...