title: Rails5 Action Cable Nginx 404 and 502 errors
body: <p>Everyone :).
  I know people have already faced alot of problems related to mine. I have tried all but my issue has not been resolved. I have been working from past 3 days to fix this but I am unable to do it.</p>
  
  <p>I am using ActionCable for the first time and on development server it is working fine. But in production where I am using Puma and Nginx I am facing terrible issues.</p>
  
  <blockquote>
    <p>Initially when I had not (location /cable) settings in nginx configuration, server gives me 404 handshake error<br>
    i.e Error during WebSocket handshake: Unexpected response code: 404 </p>
    
    <p>Then after I add following location /cable configuration in nginx configuration I start getting 502 bad gateway error. </p>
    
    <p><strong>Note: I have not opened any port specifically for ActionCable. I assume it is not required. only port 80 is open on my server.</strong></p>
    
    <p>I need some expert to help me with this. I need quick help to get it fixed. Thanks in advance :)</p>
  </blockquote>
  
  <p>I have these two lines present in my environment/production.rb</p>
  
  <pre><code>config.action_cable.url = "ws://my_linode_domain/cable"
  config.action_cable.allowed_request_origins = [/http:\/\/*/, /https:\/\/*/]
  </code></pre>
  
  <p>This is my nginx config file</p>
  
  <pre><code>    upstream app {
        # Path to Puma SOCK file, as defined previously
        server unix:/home/deploy/artcrate/shared/tmp/sockets/puma.sock fail_timeout=0;
      }
  
      server {
        listen 80;
        #server_name localhost;
        server_name my_linode_domain
  
       # prevents 502 bad gateway error
       large_client_header_buffers 8 32k;
  
        root /home/deploy/artcrate/current/public;
  
        try_files $uri/index.html $uri @app;
  
        location / {
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Host $host;
          proxy_redirect off;
          proxy_http_version 1.1;
          proxy_set_header Connection '';
          proxy_pass http://app;
        }
        location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt {
          gzip_static on;
          expires max;
          add_header Cache-Control public;
        }
      location /cable{
         proxy_pass http://app;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "Upgrade";
       }
  
        error_page 500 502 503 504 /500.html;
        client_max_body_size 4G;
        keepalive_timeout 10;
      }
  </code></pre>
  
  <p><strong>I have tried various proxy_pass options in location /cable settings but none worked.</strong></p>