我需要托管一个使用laravel-echo-server的laravel应用程序到HTTPS服务器上。
我想使用Apache的反向代理将我的/socket.io
URL轮询重定向到同一域名URL中的端口为6001
的127.0.0.1
,该地址是laravel-echo-server
运行的位置。
例如,在https://example.com
上,当我的laravel-echo-server
发送URL轮询到https://example.com/socket.io
时,Apache应将其重定向到同一域名下的http://127.0.0.1:6001
。
注意
我没有将我的laravel应用程序托管在根目录中,而是在cpanel中的子目录中。
我的服务器是一个VPS,我正在从独立于主服务器主机的单独IP地址的子域主机上进行托管。
假设我的主机是指向/home/...
目录的具有唯一IP地址的host.mydomain.com
。这运行在http
上。
现在我有一个具有唯一IP地址的domestic.mydomain.com
,它指向/home/domestic/...
目录,我正在从那里托管我的laravel应用程序。这运行在https
上。
但是,我从host.mydomain.com
IP地址登录cpanel,在那里访问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
时,它成功地初始化并显示正在127.0.0.1上的端口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中的任何频道。经过大量测试,我发现代理确实重定向了,但我怀疑它是否命中了我想要的特定响应。以下是我的404的HTML响应,这不是我的服务器配置的404响应:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /</pre>
</body>
</html>
在我的本地服务器上它运行得非常完美,但我需要让它在生产服务器上运行。
php artisan queue:listen --timeout=0
,但它没有在 laravel-echo-server 上出现。也没有用户加入他的频道。 - Tyoma InagamovApache
而不是nginx
。其次,它是在私有通道上吗?尝试使用公共通道,让我们看看。最后,laravel-echo-server
只在socket io
的 2 版本上为我工作。在GitHub
上已经开了一个问题 https://github.com/tlaverdure/laravel-echo-server/issues/559 - Ikechukwu