Rails 5.0.0通过代理执行Actioncable

时间:2016-07-03 10:04:01

标签: ruby-on-rails nginx websocket puma actioncable

我有一个使用Puma和Nginx 1.10部署到vps的聊天应用程序 我的nginx配置如下:

upstream websocket {
  server 127.0.0.1:28080;
}

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

这是我的电缆配置文件:

require ::File.expand_path('../../config/environment',  __FILE__)
Rails.application.eager_load!

ActionCable.server.config.disable_request_forgery_protection = true

run ActionCable.server

在environment / production.rb

config.action_cable.allowed_request_origins = ['http://ahu.mydomain.ir', 'https://ahu.mydomain.ir']
config.action_cable.url = "ws://ahu.mydomain.ir/cable"

我的客户端通过代理服务器连接到互联网,在Chrome控制台中我收到以下错误:

  

WebSocket连接到' ws://ahu.mydomain.ir/cable'失败:   通过代理服务器建立隧道失败

在没有代理的另一个客户端,每件事情都可以。

2 个答案:

答案 0 :(得分:0)

不幸的是,许多代理服务器会干扰标头,在TLS方面充当中间人,有时候不支持ActionCable。请参阅我在ActionCable - the good & bad parts上的文章,因为它涵盖了其中一些不足之处。

答案 1 :(得分:0)

幸运的是我找到了答案,我们应该将SSL添加到VPS并设置Nginx配置以使用端口443。

要使用SSL,我们应该在Nginx .conf文件中添加以下内容:

|X|X|X|X|X|X|X|X|X|X|
|X|O|X|O|X|O|X|O|X|O|
|X|X|X|X|X|X|X|X|X|X|
|X|O|X|O|X|O|X|O|X|O|
|X|X|X|X|X|X|X|X|X|X|
|X|O|X|O|X|O|X|O|X|O|
|X|X|X|X|X|X|X|X|X|X|