Proxy websocket to backend application.
Apache:
First enable proxy_wstunnel.load mod in mods-enabled folder:
cd /etc/apache2/mods-enabled
ln -s ../mods-available/proxy_wstunnel.load ./
Assume your backend websocket application running at port 8765, and the client side needs to connect to ws://yourwebsite.com/ws/.
In your site config file, add:
    ProxyRequests off
    ProxyPass /ws/ ws://localhost:8765/ retry=1
    ProxyPassReverse /ws/ ws://localhost:8765/
    RewriteEngine on
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
    RewriteRule /ws/.* ws://localhost:8765%{REQUEST_URI} [P]
Nginx
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}
server {
    listen 443 ssl;
    server_name yourwebsite.com
    # ...
    location /ws/ {
        proxy_pass "http://localhost:8765/ws/";
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
    # ...
}
Reference
- https://www.nginx.com/blog/websocket-nginx/
- https://stackoverflow.com/questions/12102110/nginx-to-reverse-proxy-websockets-and-enable-ssl-wss
