タイトルの通りですが、 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 に接続できることを確認しました。

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;
    }
}

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

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;
    }
}

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

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