Всем привет, нужна помощь в подключении модуля Node.js integration
Пробую подключить Node.js к Drupal на домене который работает на https.
Если запускать просто на http работает все отлично, но нужно чтобы работало на https
Сам сервер в консоли создается и видно что работает (идут запросы) но на сайте ничего не происходит в логах сайта пишутся ошибки.
Уже все перепробовал не работает ((
Ошибки которые получаю
1. Error reaching the Node.js server at "nodejs/content/token" with {"token":"uxhyrYkU9DdTL9YJfI2Myj1Mrj2pxLjE4alQNkO9lhA","channel":"watchdog_dblog","notifyOnDisconnect":false} "%{"token":"uxhyrYkU9DdTL9YJfI2Myj1Mrj2pxLjE4alQNkO9lhA","channel":"watchdog_dblog","notifyOnDisconnect":false}": [0] Error opening socket ssl://********.net:8887.
2. Error reaching the Node.js server at "nodejs/content/token" with {"token":"uxhyrYkU9DdTL9YJfI2Myj1Mrj2pxLjE4alQNkO9lhA","channel":"watchdog_dblog","notifyOnDisconnect":false} "%{"token":"uxhyrYkU9DdTL9YJfI2Myj1Mrj2pxLjE4alQNkO9lhA","channel":"watchdog_dblog","notifyOnDisconnect":false}": [-111] Connection refused.
Комментарии
Судя по ошибке, не может открыть сокет и я бы проверял доступность сокета.
а как его проверить?
Вот лог с консоли
Started https server.
Socket connect - /#58ezbX19HWEBquQCAAAA
Socket connect - /#L8wW_amLbvafQkIcAAAB
Authenticating client with key "4f00d11faa75a10a7eb1fc9cfd72153c"
Sending message to backend { authToken: '4f00d11faa75a10a7eb1fc9cfd72153c',
messageType: 'authenticate',
clientId: '/#L8wW_amLbvafQkIcAAAB' } { uri: 'https://*****.net:443//nodejs/message',
body: 'messageJson=%7B%22authToken%22%3A%224f00d11faa75a10a7eb1fc9cfd72153c%22%2C%22messageType%22%3A%22authenticate%22%2C%22clientId%22%3A%22%2F%23L8wW_amLbvafQkIcAAAB%22%7D&serviceKey=',
headers:
{ 'Content-Length': 179,
'Content-Type': 'application/x-www-form-urlencoded' },
strictSSL: false }
А это ошибка с страницы репортов
А когда сайт на http, оно тоже на ssl://*****:8887 конектится?
нет, оно идет на ssl только когда через https работает
судя по коду который написан в includes/common.inc line 866, оно идет через tcp://
методом дебага выяснил что оно обламовается когда запускает функцию stream_socket_client и возвращает false
теперь даже не знаю куда копать...
У вас наверно самоподписанный серт?
если бы, купленый все официально и проверенно.
И нода его же использует для своего сокета?
затрудняюсь ответить, как это проверить?
Ту часть Nodejs кода которая отвечает за настройки поднятия сервиса на определенный порт, но я строю догадки исходя из своего опыта: ошибку что вы указали с невозможностью открыть сокет, как раз связана с тем что пхп пытается сделать ссл только по валидному сертификату в php56 и выше. В 53 еще можно было невалидный серт использовать. В php56 уже надо через curl и его опции игнорирования валидности сертификата.
так я ему даю валидный сертификат + это же в ядре друпала написано.
Пробую вручную сделать конект
<?php $streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', dirname(__FILE__).'/pemFile.pem');
if ($socket = stream_socket_client(
'ssl://'.$host.':'.$port,
$errno,
$errstr,
$timeout,
STREAM_CLIENT_CONNECT,
$streamContext)
) {
fwrite($socket, "\n");
echo fread($socket,8192);
fclose($socket);
} else {
echo "ERROR: $errno - $errstr\n";
}?>
и получаю тот же false
вроде решил проблему установкой модуля https://www.drupal.org/project/chr который вместо stream_socket_client использует CURL.
Другие варианты не работают ((
Потому что то, куда вы ломитесь из php не на безопастном сертификате.
Надо не php использовать с сертом, а саму ноду настраивать его использовать.
вопрос почему оно считает что сертификат не безопасный, ведь он куплен, есть все ключи. Я пробовал их слать но ему все равно на них.
С нодой еще сильно не знаком, поэтому стараюсь обойтись "малой кровью".
Потому что их надо не слать а привязывать к сервису, когда он биндится на порт.
Попробуйте более детально изучить принцип работы сертификатов, ssl https протокола.
У меня получилось, написал небольшой мануал: https://web.gavzav.name/blog/nodejs