![](/img/trans.png)
[英]Using em-websocket gem can't change connection to 'ws://' RUBY
[英]Websocket only work with ws:// but not with wss://
我有一个配置为使用ssl的站点。 我收到的每个请求都会重定向到https。 最近我在它上面实现了一个websocket,它在开发上工作得很好,所以当我投入生产时我开始得到这个错误Firefox can't establish a connection to the server at wss://
我创建了一个新的文件区域设置,仅用于连接正在生产的我的Websocket。 当我使用ws://domain
connetc它工作,当我更改为wss://domain
我收到了错误消息。
我正在使用ubuntu 18:04,Apache / 2.4.18和Rails动作电缆。
我的虚拟主机是
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
ServerAdmin contato@domain.com
DocumentRoot /var/www/domain.com/public
ProxyRequests off
ProxyPreserveHost On
LogLevel error
<Location />
Order allow,deny
Allow from all
Require all granted
</Location>
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ProxyPass /cable/ ws://127.0.0.1:28080/cable/
ProxyPassReverse /cable/ ws://127.0.0.1:28080/cable/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerName domain.com
ServerAlias www.domain.com
ServerAdmin contato@domain.com
DocumentRoot /var/www/domain.com/public
ProxyRequests off
ProxyPreserveHost On
LogLevel error
<Location />
Order allow,deny
Allow from all
Require all granted
</Location>
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ProxyPass /cable/ wss://127.0.0.1:28080/cable/
ProxyPassReverse /cable/ wss://127.0.0.1:28080/cable/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
在localhost之外的域名如果我调用exampleSocket = new WebSocket("wss://domain.com/cable/");
我得到Firefox can't establish a connection to the server at wss://
,但如果我调用exampleSocket = new WebSocket("ws://domain.com/cable/");
连接工作。
在现场,如果我调用exampleSocket = new WebSocket("ws://domain.com/cable/");
,由于ssl而无法使用,并且我收到SecurityError: The operation is insecure.
任何人都可以帮忙吗?
<VirtualHost *:80>
...
ProxyPass / http://127.0.0.1:8080/
...
ProxyPass /cable/ ws://127.0.0.1:28080/cable/
...
<VirtualHost *:443>
...
ProxyPass / http://127.0.0.1:8080/
...
ProxyPass /cable/ wss://127.0.0.1:28080/cable/
您未知的Websocket服务器不太可能在同一端口28080上同时执行ws://
和wss://
。它更可能只能执行ws://
,即您应该转发到ws://
以获取请注意,这与您正在为正常流量正确执行的操作类似:端口80和端口443都转发到内部http://
而不是一个转发到http://
和另一个到https://
。
我解决了这个问题。 由于apache配置文件上的proxypass的顺序,一切都出错了。 我把文件改成了这个
<VirtualHost *:80>
ServerName suaradioonline.com
ServerAlias www.suaradioonline.com
ServerAdmin contato@suaradioonline.com.br
DocumentRoot /var/www/suaradioonline.com/public
ProxyRequests off
ProxyPreserveHost On
LogLevel error
<Location />
Order allow,deny
Allow from all
Require all granted
</Location>
ProxyPass /cable/ ws://127.0.0.1:28080/cable/
ProxyPassReverse /cable/ ws://127.0.0.1:28080/cable/
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerName suaradioonline.com
ServerAlias www.suaradioonline.com
ServerAdmin contato@suaradioonline.com.br
DocumentRoot /var/www/suaradioonline.com/public
ProxyRequests off
ProxyPreserveHost On
LogLevel error
<Location />
Order allow,deny
Allow from all
Require all granted
</Location>
ProxyPass /cable/ ws://127.0.0.1:28080/cable/
ProxyPassReverse /cable/ ws://127.0.0.1:28080/cable/
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
这是因为所有传入的请求中都存在ProxyPass /匹配,并且从未达到请求/cable/
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.