![](/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.