Laravel Echo Server: ошибка при отправке запроса аутентификации на производстве с использованием HTTPS (ошибка подписки на частный канал/канал присутствия)

Я создал приложение для чата в реальном времени, используя: Laravel 5.8, Laravel Echo, Redis, Socket.io и Vue.js.

Он отлично работает на моей локальной машине (localhost). Но когда я попытался переместить приложение на производственный сервер (с https), оно перестало работать и показывает следующую ошибку в файле laravel-echo-server.log:

ошибка laravel-echo-server.log

Также я изменил laravel-echo-server.json (файл конфигурации эхо-сервера) следующим образом:

содержимое laravel-echo-server.json

Также вы можете увидеть, как выглядит window.Echo config (в app.js):

import Echo from 'laravel-echo'
window.io = require('socket.io-client');

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001'
});

Может быть, у меня какие-то ошибки в конфигах, о которых говорилось выше?

Кроме того, я думаю, что это должно быть полезно, посмотрите на скриншот ниже, что я заметил в одном из запросов клиента:

ошибка запроса клиента

Я пытался найти больше информации об ошибке и о том, почему она может появиться, но безрезультатно. Точно я проверил файл журнала laravel - он был пуст, и файл nginx error.log, который тоже был пуст, единственное место, где я увидел ошибку, это файл laravel-echo-server.log (я засунул его содержимое выше)

для получения дополнительной информации вы можете проверить, какие настройки я использую для сервера Redis в моем файле .env (я очистил кеш при изменении .env):

...

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

...

Кроме того, это то, что у меня есть в моем файле config/database.php:

...

'redis' => [

    'client' => env('REDIS_CLIENT', 'predis'),

    'options' => [
        'cluster' => env('REDIS_CLUSTER', 'predis'),
    ],

    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_DB', 0),
    ],

    'cache' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_CACHE_DB', 1),
    ],

],

...

Большое спасибо, ребята, за любую помощь, последние несколько дней я боролся с этой проблемой и не могу понять, поэтому буду благодарен за любые советы!


person Taras Chernata    schedule 23.07.2019    source источник
comment
Кстати, я заметил, что общедоступные каналы работают нормально, но частный канал и канал присутствия не работают (ошибка авторизации)   -  person Taras Chernata    schedule 24.07.2019
comment
Настроены ли в routes/channels.php необходимые маршруты для всех ваших частных каналов и каналов присутствия?   -  person Namoshek    schedule 25.07.2019
comment
Привет! спасибо, но несколько минут назад я исправил ошибку, вы можете проверить в комментарии ниже :)   -  person Taras Chernata    schedule 25.07.2019


Ответы (2)


Запустите эту команду в терминале

sudo nano /etc/hosts

Добавьте хост вашего проекта в запись Host

127.0.0.1 https://naturalselection.ie

И сохраните файл

После запуска этой команды в терминале

laravel-echo-server start

И наслаждайтесь живым уведомлением с помощью Laravel Echo

person kishan maru    schedule 22.01.2020

Я разобрался.

Чтобы решить эту проблему, вы должны перейти в /etc/hosts и вставить туда следующий текст: 127.0.0.1 your_domain_name.com

sudo nano /etc/hosts
127.0.0.1 your_domain_name.com

Вот и все, надеюсь, это кому-нибудь поможет :)

person Taras Chernata    schedule 25.07.2019
comment
Думаю, вы также могли бы использовать вместо этого локальный IP-адрес в конфигурации authHost laravel-echo-server. Но да, обычно это одна из первых вещей, которую вы настраиваете при настройке сервера, так что это хорошая ловушка. :) - person Namoshek; 25.07.2019
comment
Спасибо за решение, Тарас. В моем случае мне пришлось использовать внутренние имена хостов докера вместо общедоступного имени хоста. - person xyz; 21.10.2019
comment
@xyz есть ли шанс, что вы можете поделиться тем, что вы в итоге сделали? У меня такая же проблема. - person janson0; 20.05.2020
comment
@janson0 Так что в основном у меня было неправильное имя хоста в laravel-echo-server.json. Итак, для моего док-контейнера laravel-echo-server (называемого npm) был раздел ссылок, где я сопоставляю имя контейнера app с myfakehostname.local. И laravel-echo-server.json authHost указывает на myfakehostname.local - person xyz; 20.05.2020