[SOLVED] The famous "Failed to upgrade websocket connection"

Hello,

My company is testing mattermost but I have trouble with websocket.

The error is well known :

[2017/05/15 17:53:25 CEST] [EROR] /api/v3/users/websocket:connect code=500 rid=u877fuhbmifg9btbcg3ca199xr uid=wgnz56hijffzmf4uw19qkymsno ip=192.44.77.211, 10.0.4.107 Failed to upgrade websocket connection [details: ]

I have read many documents about this error, but I didn’t find any solution.

My config is :

  • Mattermost 3.8.2 on debian 8
  • MariaDB
  • Nginx 1.12

Here is my nginx conf.

upstream mattermost {
  server 127.0.0.1:8065;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;

server {
  listen *:80;
  server_name mattermost.example.net;

  location ~ /api/v[0-9]+/(users/)?websocket$ {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    client_max_body_size 50M;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Frame-Options SAMEORIGIN;
    proxy_buffers 256 16k;
    proxy_buffer_size 16k;
    proxy_read_timeout 600s;
    proxy_pass http://mattermost;
  }

  location / {
    client_max_body_size 50M;
    proxy_set_header Connection "";
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Frame-Options SAMEORIGIN;
    proxy_buffers 256 16k;
    proxy_buffer_size 16k;
    proxy_read_timeout 600s;
    proxy_cache mattermost_cache;
    proxy_cache_revalidate on;
    proxy_cache_min_uses 2;
    proxy_cache_use_stale timeout;
    proxy_cache_lock on;
    proxy_pass              http://mattermost;
  }
}

Can I have any help ?

Thanks.

Eric

I have found the problem.
I’m hosting mattermost on AWS with ELB & EC2. But ELB does not support websocket.

The solution is to enable ProxyProtocle on ELB.
More info here : https://www.built.io/blog/websockets-on-aws-s-elb

Eric

Hi @elhostis,

Thank you for your question and for posting the solution for others! Appreciated :slight_smile:

FYI, Mattermost v3.9.0 shipped on May 16th if you’d like to upgrade to the latest version.

I have the same error with Mattermost 3.8.2 on Google Cloud Platform when connecting with either the 2016 or 2017 Mattermost Android apps. Do you have any tips for resolving the issue on another platform?

[2017/05/26 19:56:36 UTC] [EROR] websocket connect err: websocket: could not find connection header with token 'upgrade'
[2017/05/26 19:56:36 UTC] [EROR] /api/v4/websocket:connect code=500 rid=mpb68nbs3tyeupuzf9i9mikttr uid=rduuu9qdibgqi8yr5hbqnyc5sh ip=204.115.121.51 Failed to upgrade websocket connection [details: ]

Hi,

Can I see your webserver conf ?

Eric