我有一个使用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'失败: 通过代理服务器建立隧道失败
在没有代理的另一个客户端,每件事情都可以。
答案 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|