sql >> Base de Datos >  >> NoSQL >> Redis

Configuración del proxy inverso de Apache para alojar el servidor Laravel Echo en producción

Finalmente lo conseguí.

Si bien mi sitio web aún debe tener un SSL, la solución es obtener Apache para redirigir /socket.io a http://localhost:6001/socket.io ya configurado para redis . Luego usa 2.2.3 versión de socket io .

Así que mi laravel-echo-server.json no está configurado para SSL.

Aquí está mi laravel-echo-server.json :

{
   "authHost": "https://domainName.com",
   "authEndpoint": "/broadcasting/auth",
   "clients": [
      {
        "appId": "xxxxxxx",
        "key": "xxxxxxxxxxx"
      }
   ],
   "database": "redis",
   "databaseConfig": {
      "redis": {},
      "sqlite": {
          "databasePath": "/database/laravel-echo-server.sqlite"
      }
   },
   "devMode": false,
   "host": null,
   "port": "6001",
   "protocol": "http",
   "socketio": {},
   "sslCertPath": "",
   "sslKeyPath": "",
   "sslCertChainPath": "",
   "sslPassphrase": "",
   "subscribers": {
       "http": true,
       "redis": true
   },
   "apiOriginAllow": {
   "allowCors": true,
   "allowOrigin": "*",
   "allowMethods": "GET, POST",
   "allowHeaders": "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id"
}

Cómo utilizo laravel-echo-server.json:

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,
  });

}

Y mi configuración de apaxhe dentro de mi SSL virtualhost para mi dominio:

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
RewriteCond %{QUERY_STRING} transport=websocket    [NC]
RewriteRule /(.*)           ws://localhost:6001/$1 [P,L]

ProxyPass        /socket.io http://localhost:6001/socket.io
ProxyPassReverse /socket.io http://localhost:6001/socket.io 

Además, requeriría un administrador de procesos de Node js para mantener el laravel-echo-server corriendo. Así que creé echo-server.json y colocó el siguiente código.

{
  "name": "apps",
  "script": "laravel-echo-server",
  "args": "start"
}

A continuación, instalo pm2 gestor de procesos. npm install pm2 -g e inicié mi servicio pm2 start echo-server.json --name="apps" .

Por último, uso pm2 list para ver todos mis servicios y pm2 startup para mantener mis servicios funcionando.