Как запустить laravel echo server ( +redis ) с доступом по внешнему ip (alias OpenServer)?

На windows установлен Open Server и Redis. Через Open Server в алиасах:
1) Перенаправление с внешнего ip на конечный домен (vizitka/).
2) Перенаправление с локального ip (192.168.0.102) на конечный домен(vizitka/).
На сайте имеется чат на websocket (socket.io).
При подключении к сайту с локального ip авторизация на laravel echo происходит нормально. Но если подключаться с внешнего ip, то сайт открывается, но запросы к подключению по websocket не выполняются:
http://внешнийIP:6001/socket.io/?EIO=3&transport=polling&t=MKaHXCl 0 ()

Файл .env
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Файл laravel-echo-server.json
{
	"authHost": "http://vizitka/",
	"authEndpoint": "/broadcasting/auth",
	"clients": [
		{
			"appId": "APP_ID",
			"key": "e0702d5258f6bd18b91d52f7a37442f2"
		}
	],
	"database": "redis",
	"databaseConfig": {
		"redis": {},
		"sqlite": {
			"databasePath": "/database/laravel-echo-server.sqlite"
		}
	},
	"devMode": true,
	"host": null,
	"port": "6001",
	"protocol": "http",
	"socketio": {},
	"sslCertPath": "",
	"sslKeyPath": "",
	"sslCertChainPath": "",
	"sslPassphrase": "",
	"apiOriginAllow": {
		"allowCors": false,
		"allowOrigin": "",
		"allowMethods": "",
		"allowHeaders": ""
	}
}

После авторизации на сайте происходит подключение к Echo:
window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001',
    auth: {
        headers: {
            Authorization: 'Bearer ' + localStorage.getItem('token')
        },
    },
});

И далее пользователь начинает прослушивать свой канал:
window.Echo.private('room.' + this.user_id)
    .listen('PrivateChat', ({data}) => {
        ...
    })

Пробовал в файле laravel-echo-server.json изменить authHost и host на http://внешнийIp/ , но в таком случае при выполнении команды laravel-echo-server start выдает ошибку:
✔  Running at http://внешнийIp/ on port 6001
✔  Channels are ready.
✔  Listening for http events...
events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: getaddrinfo ENOTFOUND http://внешнийIp/
    at errnoException (dns.js:50:10)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)

Update:
В настройках wifi роутера Forwarding > Virtual Servers:
1) Порт: 80, ip адрес: 192.168.0.102 (Было ранее)
2) Порт: 6001, ip адрес 192.168.0.102 (Добавлено)
Теперь работает подключение к websocket по внешнему ip.
Подскажите пожалуйста как эта магия работает?
  • Вопрос задан
  • 2959 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Ogureccc
У тебя же клиент с учится на внешний ip а не на локалхост, ты на роутере порт открыл и все должно заработать было все правильно
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы