无法升级到 WebSocket(REQUEST_METHOD:GET,HTTP_CONNECTION:,HTTP_UPGRADE:)

Failed to upgrade to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: , HTTP_UPGRADE: )

我有一个 Rails 带有 nginx 和 passenger 的应用程序,我已经按照说明进行操作 here 但一直无法升级到 WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: , HTTP_UPGRADE: )

我已经按照文档的建议添加了下面的块

location /cable {
    passenger_app_group_name app_name_action_cable;
    passenger_force_max_concurrent_requests_per_process 0;
}

但错误仍然存​​在,而且我已经尝试了所有关于 stackover flow 的解决方案,但没有任何帮助?

  redis: &redis
  adapter: redis
  url: redis://localhost:6379/1

  development: *redis

  test: *redis

  production:
   adapter: redis
   url: <%= Rails.application.credentials[Rails.env.to_sym][:redis_url] %>

可能您需要在 nginx 配置中进行一些配置?我并没有真正与 passenger 一起工作,但在我的项目中我像这样使用它:

  upstream socket_server {
    server <your_ip>:<your_port>;
  }

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

我使用 anycable gem 和 golang 套接字服务器,它可能与 passenger 和默认 actioncable 不同,但可能是我的答案可以帮助您解决问题

(此外,我强烈建议继续 anycable,因为它消耗的服务器资源最少:))