Enable WebSocket in Cpanel Server with Nginx

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

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *