Приветствую коллеги, недавно перевел сайт на https и соединение с socket.io перестало работать: WebSocket connection to '
wss://site.ru:9999/socket.io/?EIO=3&transport=websocket' failed: Error in connection establishment: net::ERR_CONNECTION_CLOSED
Есть у кого готовый конфиг? Проблема в том, что пути к SSL сертификатам и ключам на рабочей и разработческой машине хранятся в разных местах и вручную их подключать в файле ноды не варик, к тому же раскидываться сертификатами по разным машинам и отдавать их разрабам всем тоже не правильно. В nginx ключи уже подключены и php'шка благополучно их использует, а вот что прописать в конфиге, чтобы они и для websocket применялись не ясно. Те мануалы которые я нагуглил по настройкам подходят, если у нас сайт полностью на ноде, а в нашем случае все сайты полностью на php и вебсокеты используются только чтобы иногда получать срочные оповещения от сервера.
На данный момент конфиг примерно такой:
server {
listen 80;
server_name is.site.ru;
return 302 https://is.site.ru$request_uri;
}
server {
root /var/www/folder/is;
server_name is.site.ru;
index index.php;
listen 443;
ssl on;
ssl_certificate /etc/letsencrypt/live/site.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/keys/key.pem;
ssl_dhparam /opt/letsencrypt/dh.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:ECDH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:5m;
ssl_session_timeout 10m;
ssl_stapling on;
resolver 8.8.8.8;
add_header Strict-Transport-Security 'max-age=23328000';
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ .php$ {
if (!-e $request_filename) { rewrite / /index.php last; }
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9006;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param HTTPS on; # Для php-fpm
}
}
Сокет.ио сервер:
// Подключаем либы для создания веб-сервера
var app = require('express')(),
http = require('http').Server(app),
io = require('socket.io')(http),
cookie = require('cookie'),
port = 9999,
fs = require('fs'),
path = require("path"),
parser = require('groan');
// Что делаем при подключении
io.on('connection', function(socket){
// Работем с socket
});
// Слушаем запросы приходящие на порт
http.listen(port, function(){
console.log('listening on *:' + port);
});
Сокет.ио клиент:
(function($) {
$(document).ready(function(){
// Открываем соединение, при открытии страницы
var socket = io.connect(
location.origin + ':9999',
{
transports: ['websocket', 'flashsocket', 'xhr-polling'],
reconnection: false
}
);
// Получаем уведомление от сервера
socket.on('server notice', function(json) {
console.log(json);
});
});
})(jQuery);