Cuando configuramos laravel-websockets localmente en docker, todo funcionó maravillosamente; sin embargo, cuando todo se puso a prueba, surgieron problemas. En consecuencia, tenemos que dividir nuestro sitio principal en un servidor y el servidor websocket en un servidor diferente. Todos estos sitios están en una red interna corporativa y no usan SSL.
Entonces, la aplicación principal es Laravel 6 que se ejecuta en Centos, Apache 2.4 y PHP 7.3. Puede conectarse al servidor websocket, pero cada vez que laravel transmite un evento, obtenemos un error 404 para este punto final:
apps/XXXXXX/events?auth_key=XXXXXXX&auth_signature=XXXXXXX&auth_timestamp=XXXX&auth_version=1.0&body_md5=XXXXX
El servidor websocket es Centos, PHP 7.3, Nginx 1.8 configurado como proxy inverso utilizando el archivo conf de ejemplo de spaties/behindcodes.
map $http_upgrade $type { default "web"; websocket "ws"; } server { listen 80; server_name XXXXXXXXX; root /opt/rh/rh-nginx18/root/usr/share/nginx/www/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.html index.htm index.php; charset utf-8; location / { try_files /nonexistent @$type; } location @web { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 500 502 503 504 404 /index.php; location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location @ws { proxy_pass http://127.0.0.1:6001; proxy_set_header Host $host; proxy_read_timeout 60; proxy_connect_timeout 60; proxy_redirect off; # Allow the use of websockets proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } location ~ /\.(?!well-known).* { deny all; } }Todo mi equipo es nuevo en nginx, por lo que pensamos que probablemente haya un problema allí u otra cosa que hayamos configurado incorrectamente. Sabemos que nuestros eventos y la transmisión dentro de la aplicación principal de laravel son correctos, porque funcionó cuando todo se ejecutaba en un solo clúster de Apache. Nuestro problema era que la empresa no abriría un puerto en el firewall que no sea 80 y 443. Estamos optando por dividir el tráfico en 80 con nginx según la documentación de beyondcode.
Tiene alguna idea sobre esto? Estamos perdidos. ¡Gracias a todos!
Editar:
Debo agregar que estamos usando Laravel Echo con Pusher.JS para el front-end:
import Echo from 'laravel-echo'; window.Pusher = require('pusher-js'); window.Echo = new Echo({ broadcaster: 'pusher', key: process.env.MIX_PUSHER_APP_KEY, wsHost: 'XXXXXXXXXX', wsPort: 80, disableStats: true });