inik23
@inik23
типа разработчик

Как подружить сокет сервер на Nodejs и https?

Всем привет. Подскажите или натолкните на правильный путь.
Проблема:
Есть сервер на котором размещен сайт (php) так же на этом сервере установили nodejs
Поднял на нем сокет сервер . На dev сервере все работает четко.
На боевом протокол https к нему вообще не хотел конектиться. Админ что то пошаманил и nodejs сервер стал доступен по протоколу http при обращении к нему через браузер напрямую. Но когда мой js скрипт соединятся с сокетом то выдает вот такую ошибку

Mixed Content: The page at 'https://xxxx_test.ru/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://xxxx_test.ru:8888/socket.io/?EIO=3&transpor...'. This request has been blocked; the content must be served over HTTPS.


Подскажите как это исправить?
И какой вариант лучше:
Nodejs сервер непосредственно на одном сервере с сайтом или совсем на другом сервере?
Спс.
  • Вопрос задан
  • 1291 просмотр
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
Если страница грузится через https то все ajax запросы должны идти через https, а вебсокеты через wss - это политика безопасности
Тут два варианта:
1й - настроить проксирование ngnix -> node в этом случае все будет на одном порту (не понадобится CORS)
2й - запускать сервер ноды через модуль https а не http (как это сделать есть в доке socket.io)
Ответ написан
inik23
@inik23 Автор вопроса
типа разработчик
Запускаю сервер через https
var https = require('https');
var fs = require('fs');

var files = ["***************.crt", "***************.crt"];
var file;

var ca = (function() {
    var _i, _len, _results;
    _results = [];
    for (_i = 0, _len = files.length; _i < _len; _i++) {
        file = files[_i];
        _results.push(fs.readFileSync('/etc/ssl/tcerts/' + file));
    }
    return _results;
})();

httpsOptions = {
    ca: ca,
    key: fs.readFileSync('/etc/ssl/tcerts/******.key', 'utf8'),
    cert: fs.readFileSync('/etc/ssl/tcerts/*****.crt', 'utf8')
};
https.createServer(options, function (req, res) {
    res.writeHead(200);
    res.end("hello world\n");
}).listen(8888);


Он запускается но не доступен по https://domen:8888
Когда делаю http сервер он доступен по https://domen:8888

Не понятная странность . Подскажите в чем может быть проблема?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы