Rails 5.0.0 Actioncable 通过代理
Rails 5.0.0 Actioncable via Proxy
我使用 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";
}
}
这是我的 config.ru 电缆文件:
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 connection to 'ws://ahu.mydomain.ir/cable' failed:
Establishing a tunnel via proxy server failed
在另一个没有代理的客户端中一切正常。
幸运的是我找到了答案,我们应该将 SSL 添加到 VPS 并将 Nginx 配置设置为通过端口 443 使用它。
要使用 SSL,我们应该在 Nginx .conf 文件中添加以下内容:
server {
listen 443 ssl;
server_name YOUR_SERVER;
ssl on;
ssl_certificate /path/to/FILE.crt;
ssl_certificate_key /path/to/FILE.key;
}
我使用 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";
}
}
这是我的 config.ru 电缆文件:
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 connection to 'ws://ahu.mydomain.ir/cable' failed: Establishing a tunnel via proxy server failed
在另一个没有代理的客户端中一切正常。
幸运的是我找到了答案,我们应该将 SSL 添加到 VPS 并将 Nginx 配置设置为通过端口 443 使用它。
要使用 SSL,我们应该在 Nginx .conf 文件中添加以下内容:
server {
listen 443 ssl;
server_name YOUR_SERVER;
ssl on;
ssl_certificate /path/to/FILE.crt;
ssl_certificate_key /path/to/FILE.key;
}