

タイトルの通りですが、 Rails 5 + ActionCable + Puma + Nginx で Puma をソケットで起動すると WebSocket
に接続できないのは仕様でしょうか？

主な利用バージョンは下記の通りです。

  * Ruby: 2.4.2 
  * Ruby on Rails: 5.0.6
  * Puma: 3.11.2
  * Nginx: 1.12.2

例えば、 Puma は `bundle exec puma -b tcp://0.0.0.0:9292` のように起動して、 Nginx
の設定は下記のように書くと、 WebSocket に接続できることを確認しました。

[code]

    server {
        location /websocket {
            proxy_http_version 1.1;
            proxy_set_header Upgrade websocket;
            proxy_set_header Connection Upgrade;
            proxy_pass http://0.0.0.0:9292;
        }
    }
    
[/code]

これを、 Puma は `bundle exec puma -b unix:///var/run/puma.sock` のように起動して、 Nginx
の設定は下記のように書くと、 WebSocket に接続できませんでした。

[code]

    server {
        location /websocket {
            proxy_http_version 1.1;
            proxy_set_header Upgrade websocket;
            proxy_set_header Connection Upgrade;
            proxy_pass http://unix:/var/run/puma.sock;
        }
    }
    
[/code]

そこでお伺いしたのですが、

  * これは WebSocket （または ActionCable ？）の仕様でしょうか？ 
    * 仕様である場合、仕様が書かれたドキュメントがあればご教示いただきたいです。
  * もしくは、 Puma や Nginx の設定の書き方や起動方法が間違っているだけで、 Puma をソケットで起動しても WebSocket に接続できるのでしょうか？


CC BY-SA 3.0
2018-02-09T04:18:12.697
41602
2018-02-09T04:18:12.697
8160
question
ruby-on-rails websocket
Ruby on Rails 5 + ActionCable + Puma + Nginx で Puma をソケットで起動すると WebSocket に接続できないのは仕様でしょうか？