On a Cpanel server, WebSocket server was running on port 8080. It worked fine with HTTP. After enabling HTTPS, it stopped working.
The website code had the following entry
var websocket_server = new WebSocket("ws://domain.com:8080");
This Cpanel server had ea-nginx (Nginx provided by Cpanel) installed.
To fix the error, I created a file
vi /etc/nginx/conf.d/ws-domain.com.conf
In the above, replace domain.com with the actual domain name.
Add following content
map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream websocket { server 127.0.0.1:8080; }
Create file
vi /etc/nginx/conf.d/users/CPANEL_USER/domain.com/wss.conf
Replace CPANEL_USER with the actual Cpanel user name for the website. domain.com with real domain name,
Add following
location /wsapp/ { proxy_pass http://websocket; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; }
Restart nginx
systemctl restart nginx
In your application code, find
var websocket_server = new WebSocket("ws://domain.com:8080");
Replace with
var websocket_server = new WebSocket("wss://domain.com/wsapp/NNN");
See Cpanel Server