Задать вопрос

Как решить проблему с Socket.io и Https?

Ставлю скрипт рулетки вещей. Есть связка apache + nodejs + socket.io. Если зайти на сайт по айпи адресу, то сайт коннектится к боту по сокету, в консоли все нормально. Если зайти на сайт по домену, то ругается двумя ошибками:

GET https://site.ru:2053/socket.io/?EIO=3&transport=polling&t=1564049380135-11 521

Access to XMLHttpRequest at 'https://site.ru:2053/socket.io/?EIO=3&transport=polling&t=1564049380135-11' from origin 'https://site.ru' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.


Пробовал настроить CORS добавив в .htaccess
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>

но не помогло.

На сайте в скриптах используется соединение
var socket = io.connect(':2053'); также пробовал указать var socket = io.connect(https://site.ru':2053');, ничего не помогло.

App.js для старта бота используется с таким конфигом:

var auth = require('http-auth'),
    scribe = require('scribe-js')(),
    console = process.console,
    config = require('./config.js'),
    app = require('express')(),
    server = require('https').Server(app),
    io = require('socket.io')(https),
    redis = require('redis'),
    requestify = require('requestify'),
	
	fs = require('fs'),
    privateKey = fs.readFileSync('/var/www/bot/keys/privkey.pem'),
    certificate = fs.readFileSync('/var/www/bot/keys/cert.pem'),
    credentials = {key: privateKey, cert: certificate},
    https = require('https').Server(credentials,app);

https.listen(config.serverPort);


Использую cloudflare, поэтому порт 2053, тот который у них открыт.

В чем может быть проблема?
  • Вопрос задан
  • 316 просмотров
Подписаться 4 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08
Твой сокет сервер должен возвращать заголовок Access-Control-Allow-Origin "*", так как твой апач возвращает его только для порта 80, а сокет сервер у тебя на 2053 порту.
Ответ написан
Ваш ответ на вопрос

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

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