I am trying to setup laravel websocket on aws hosting (ubuntu based) with SSL
When I go to page laravel-websockets and press connect it waits few seconds and then show me warning in console: WebSocket connection to 'wss://socket.mydomain.com:6001/app/workspace?protocol=7&client=js&version=4.3.1&flash=false'
failed: WebSocket is closed before the connection is established.
It works fine on my localhost without HTTPS, but when I try setup it on my server it doesn't work.
My .env file
BROADCAST_DRIVER=pusher
PUSHER_APP_ID=workspace
PUSHER_APP_KEY=workspace
PUSHER_APP_SECRET=workspace
PUSHER_APP_CLUSTER=mt1
LARAVEL_WEBSOCKETS_HOST=socket.mydomain.com
LARAVEL_WEBSOCKETS_PORT=6001 // here I tried 433 and 6001
LARAVEL_WEBSOCKETS_HTTPS=1
LARAVEL_WEBSOCKETS_ENABLE_STATISTICS=false
LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT=/etc/letsencrypt/live/socket.mydomain.com/fullchain.pem
LARAVEL_WEBSOCKETS_SSL_LOCAL_PK=/etc/letsencrypt/live/socket.mydomain.com/privkey.pem
config/websockets.php
'dashboard' => [
'host' => env('LARAVEL_WEBSOCKETS_HOST'),
'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001)
],
'apps' => [
[
'host' => env('LARAVEL_WEBSOCKETS_HOST'),
'port' => env('LARAVEL_WEBSOCKETS_PORT'),
'id' => env('PUSHER_APP_ID'),
'name' => env('APP_NAME'),
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'path' => env('PUSHER_APP_PATH'),
'capacity' => null,
'enable_client_messages' => false,
'enable_statistics' => env('LARAVEL_WEBSOCKETS_ENABLE_STATISTICS', true),
'encrypted' => true
],
],
'ssl' => [
'local_cert' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null),
'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null),
'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null),
'verify_peer' => false,
'verify_peer_name' => false
],
config/broadcasting.php
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'host' => env('LARAVEL_WEBSOCKETS_HOST'),
'port' => env('LARAVEL_WEBSOCKETS_PORT'),
'useTLS' => true,
'encrypted' => true,
'scheme' => 'https', // env('LARAVEL_WEBSOCKETS_HTTPS') ? 'https' : 'http',
'curl_options' => [
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0
]
],
],
and my nginx configuration for subdomain
server {
server_name socket.mydomain.com;
location / {
proxy_pass http://127.0.0.1:6001;
#proxy_pass https://dev-api.alsoworkspace.com;
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;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/socket.mydomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/socket.mydomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = socket.mydomain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name socket.mydomain.com;
return 404; # managed by Certbot
}
Supervisor config:
[program:websockets]
command=/usr/bin/php /var/www/backend/artisan websockets:serve
numprocs=1
autostart=true
autorestart=true
user=ubuntu
redirect_stderr=true
Can anyone help please? I spent whole day and didn't find why it doesn't work