【发布时间】:2019-11-13 21:39:31
【问题描述】:
我需要托管一个通过 HTTPS 服务器使用 laravel-echo-server 的 laravel 应用程序。
我想使用 Apache 的反向代理将我的 /socket.io url 轮询重定向到端口 6001 上的 127.0.0.1,这是 laravel-echo-server 在同一域 url 中运行的位置。
例如在https://example.com 上,当我的laravel-echo-server 将url 轮询发送到https://example.com/socket.io 时,apache 应该将其重定向到同一域内的http://127.0.0.1:6001。
通知
我没有在根目录中托管我的 laravel 应用程序,而是在我的 cpanel 中的子目录中。
我的服务器是 VPS,我从一个子域主机托管,该主机运行在与主服务器主机不同的 IP 地址上。
假设我的主要主机是host.mydomain.com,具有指向/home/... 目录的唯一IP 地址。这运行在http
我现在有一个 domestic.mydomain.com,其唯一的 IP 地址指向 /home/domestic/... 目录,这是我托管我的 laravel 应用程序的地方。这在 https 上运行。
但我的 cpanel 登录来自我访问 domestic.mydomain.com 文件管理器的host.mydomain.com IP 地址
我的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 中的任何频道。经过大量测试后,我发现代理确实重定向了,但我怀疑它是否击中了我想要的特定代理。
这是我的 404 的 HTML 响应,这不是我的服务器配置的 404 响应:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /</pre>
</body>
</html>
它在我的本地服务器上完美运行,但我需要让它在我的生产服务器上运行。
【问题讨论】:
标签: laravel apache redis socket.io laravel-echo