Мне нужно разместить приложение laravel, которое использует laravel-echo-сервер через HTTPS-сервер.
Я хочу использовать обратный прокси-сервер Apache, чтобы перенаправить мои /socket.io
URL-опросы на 127.0.0.1
на порту 6001
, где laravel-echo-server
работает в пределах того же URL-адреса домена.
Например, более https://example.com
, когда my laravel-echo-server
отправляет опросы URL на https://example.com/socket.io
. Apache должен перенаправить его на http://127.0.0.1:6001
в этом же домене.
УВЕДОМЛЕНИЕ
Я размещаю свое приложение laravel не в корневом каталоге, а в подкаталоге моей cpanel.
Мой сервер - VPS
, и я размещаю хост с субдомена, который работает на IP-адресе, отличном от хоста основного сервера.
Допустим, мой главный хост - host.mydomain.com
с уникальным IP-адресом, указывающим на каталог /home/...
. Это работает на http
Теперь у меня есть domestic.mydomain.com
с уникальным IP-адресом, указывающим на каталог /home/domestic/...
, и именно здесь я размещаю свое приложение laravel. Это работает на https
.
Но мой логин cpanel с host.mydomain.com
IP-адреса, с которого я получаю доступ к domestic.mydomain.com
файловому менеджеру
Как выглядит laravel-echo-server.json
:
{
"authHost": "https://example.com",
"authEndpoint": "/broadcasting/auth",
"clients": [
{
"appId": "xxxx",
"key": "xxxxxxxx"
}
],
"database": "redis",
"databaseConfig": {
"redis": {},
"sqlite": {
"databasePath": "/database/laravel-echo-server.sqlite"
}
},
"devMode": false,
"host": "127.0.0.1",
"port": "6001",
"protocol": "http",
"socketio": {},
"sslCertPath": "",
"sslKeyPath": "",
"sslCertChainPath": "",
"sslPassphrase": "",
"subscribers": {
"http": true,
"redis": true
},
"apiOriginAllow": {
"allowCors": false,
"allowOrigin": "",
"allowMethods": "",
"allowHeaders": ""
}
}
Как мне развернуть laravel-echo
:
import Echo from "laravel-echo";
window.io = require('socket.io-client');
// Have this in case you stop running your laravel echo server
if (typeof io !== 'undefined') {
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname,
});
window.Echo.channel('session-expired')
.listen('sessionExpired', (e) => {
setTimeout(location.reload(), 3000);
});
}
И когда я запускаю laravel-echo-server start
Он успешно инициализируется и показывает running on 127.0.0.1 on port 6001
Тогда вот мой конфиг обратного прокси apache /etc/httpd/conf/httpd.conf
:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
# mod_proxy setup.
ProxyRequests Off
ProxyPass /socket.io http://127.0.0.1:6001
ProxyPassReverse /socket.io http://127.0.0.1:6001
<Location "/socket.io">
Order allow,deny
Allow from all
</Location>
Моя проблема в том, что когда я открываю свой веб-сайт, опросы возвращают набор ответов OK
и 404
одновременно, но он не присоединяется ни к одному каналу в моем socket.io. После большого количества испытаний я понял, что прокси-сервер выполняет перенаправление, но сомневаюсь, что он выбрал именно тот, который мне нужен.
Вот ответы HTML для моего 404, который не является настроенным ответом 404 моего сервера:
<code><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /
Он отлично работает на моем локальном сервере, но мне нужно, чтобы он работал на моем рабочем сервере.