Ruby on Rails 5 + ActionCable + Puma + Nginx で Puma をソケットで起動すると WebSocket に接続できないのは仕様でしょうか?
タイトルの通りですが、 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 に接続できるのでしょうか?