Ошибка ActionCable 404 для wss с ELB и nginx

Я получаю эту ошибку для actioncable, когда я переключаю свой сайт на https:

WebSocket connection to 'wss://domain.com/cable' failed: Error during WebSocket handshake: Unexpected response code: 404

Сайт https работает нормально, но я получаю 404 для адреса веб-сокета. В моей текущей настройке SSL заканчивается на ELB, а nginx перенаправляет http на https. Я запускаю actioncable вместе с моим железнодорожным сервером, а не отдельно.

Как мне настроить безопасные веб-сокеты в ?

Вот мой файл конфигурации nginx

upstream puma {
  server unix://var/run/server.sock;
}

server {
  listen 80;
  server_name default_server;

  root /var/www/apps/server/public;

  location /cable {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_pass http://puma;
  }

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_next_upstream error;

   if ($http_x_forwarded_proto != "https") {
     rewrite ^(.*)$ https://$host$1 permanent;
   }

  proxy_pass http://puma;

  ...

}

А вот конфигурация на ELB:

Прослушиватели ELB


person oniiko    schedule 10.04.2017    source источник
comment
Обновите прослушиватель ELB с безопасного HTTPS на безопасный TCP. -elb" title="websockets wss от клиента к экземпляру amazon aws ec2 через elb"> stackoverflow.com/questions/25730368/   -  person Jirapong    schedule 27.06.2017


Ответы (1)


Исправлена ​​аналогичная ошибка (404 в actioncable/cable) в моей настройке, как эта

location /cable {
    proxy_pass http://unix:/home/app/shared/tmp/puma/socket;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Host $host:$server_port;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 86400;
}

поэтому добавьте тот же proxy_set_header, что и в другом location (X-Real-IP и т. д.)

person glebtv    schedule 17.04.2017