На 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.
Подскажите пожалуйста как эта магия работает?