@Hellek
Люблю говорить и слышать суть

Как настроить: php7-сайт с https + nginx-вебсервер + nodejs (socket.io)?

Приветствую коллеги, недавно перевел сайт на 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);
  • Вопрос задан
  • 798 просмотров
Решения вопроса 1
alexfilus
@alexfilus
Senior backend developer
Nodejs + Socket.io + https?
для https в ноде нужен отдельный listen.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 10:42
150000 руб./за проект
25 апр. 2024, в 10:41
2000 руб./за проект
25 апр. 2024, в 10:25
2000 руб./за проект