Мне интересно, каков правильный (или любой другой) способ настройки Laravel Echo на производственном сервере https. Я уже немного работал с моим локальным бродягой, и теперь, когда я внес изменения в продакшн, я не могу заставить скрипт подключиться к серверу узла. Вот что у меня сейчас есть.

var echo = require('laravel-echo-server');

var options = {
    host: 'https://localhost',
    port: '6001',
    sslCertPath: '/etc/nginx/ssl/nginx.crt',
    sslKeyPath: '/etc/nginx/ssl/nginx.key'
};

echo.run(options);

А потом в яваскрипте

import Echo from "laravel-echo"
window.echo = new Echo({
    broadcaster: 'socket.io',
    host: 'https://localhost:6001'
});

Вышеупомянутая конфигурация - это то, с чего я начал, но я пробовал много других комбинаций, в том числе пытался отредактировать конфигурацию nginx, чтобы полностью обойти https. Если обход https - это метод, который требуется, любые советы о том, как это сделать с помощью Laravel Echo, будут оценены, поскольку потоки socket.io по этой теме, на которые я ссылался, похоже, не помогают мне.

7
MMMTroy 3 Сен 2016 в 21:51

4 ответа

Лучший ответ

Вот так я решил проблему

Первый . Вам необходимо настроить свой vhost на nginx с помощью ssl (веб-сокет еще не подключен). Я использую Let's encrypt (https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04)

Второй . Вы можете создать путь на своем виртуальном хосте для прокси-сервера к вашему веб-сокету. Таким образом, nginx обрабатывает протокол ssl, а также вы не используете другой порт.

location /ws/{

    proxy_pass http://127.0.0.1:3000/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-For $remote_addr;
}

После этого ваш скрипт должен будет подключиться к `https: // localhost / ws /

Примечание. Я использую порт 3000 для своего экземпляра laravel-echo-server, а не 6001, как указано в исходном вопросе.

8
user237329 5 Янв 2018 в 08:41

Может, кто-нибудь придет сюда с такими же проблемами, как я. Во-первых, не забудьте добавить ненадежный сертификат в исключения браузера, потому что для эхо-порта laravel мы должны делать это отдельно. В противном случае в консоли будет отказано только соединение. Во-вторых, текущая версия laravel echo не принимает протокол в опции хоста, но в отдельной опции с именем «протокол».

0
Adrian1207 3 Ноя 2016 в 22:01

Я нашел решение этой проблемы. При использовании Forge и Let's Encrypt Forge в начале месяца создает папки с уникальным идентификатором, которые будут содержать ваши ключи SSL. Сначала, когда я попытался использовать эти ключи, laravel-echo-server сказал, что не может найти ключи. В коде в моем вопросе выше я ссылаюсь на два других ключа, которые были на моем сервере, которые, как я полагал, были символьной ссылкой на правильные ключи этого месяца, но оказалось, что это не так. Мне действительно нужно было обратиться к файлам в папках с уникальными идентификаторами. Чтобы заставить его работать, мне просто нужно было запустить " sudo node socket.js".

0
MMMTroy 5 Сен 2016 в 18:02

В дополнение к ответу user237329, параметр laravel echo в javascript должен быть:

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.host,
    path: '/ws/socket.io',
});
4
Robson P Oliveira 17 Дек 2018 в 00:30