让我详细解释整个情况:
我们有两台服务器: -一个共享主机 -其他是VPS
我们的要求是在项目中设置Websocket。但是,共享主机不允许打开自定义端口。因此我们决定购买另一台“ VPS”服务器。
检查下图:
如上图所示,我们的网络门户使用VPS服务器进行网络套接字连接。
共享托管为HTTPS。 VPS服务器也具有SSL。所以也是HTTPS。
因此,如果我将门户网站与“ ws”连接如下:
var wsocket = new WebSocket("ws://DOMAIN_NAME_OF_VPS:PORT")
然后给出如下错误: “混合的内容:'https://example.com'上的页面已通过Https加载,但是被确定为连接到不安全的Websocket端点'ws:// DOMAIN_NAME_OF_VPS:PORT'。该请求已被阻止;该端点必须可以通过WSS。”
因此很明显,我们不能在HTTPS中使用WS。
因此我们只需将WSS替换为WS,如下所示(当然,我们安装了SSL证书):
var wsocket = new WebSocket("wss://DOMAIN_NAME_OF_VPS:PORT")
现在我遇到此错误:与'wss:// DOMAIN_NAME_OF_VPS:PORT'的websocket连接失败:WebSocket打开握手超时。
关于websocket服务器(vps服务器):
我正在使用Ratchet进行PHP中的Websocket集成。 http://socketo.me/
我正在将Apache引擎用于PHP。
Ratchet服务器代码:
<?php
require __DIR__ . "/../vendor/autoload.php";
use Chat\Chat;
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
$server = IoServer::factory(new HttpServer(new WsServer(new Chat)), 19994);
$server->run();
?>
000个默认文件为:
我已经尝试了一些ProxyPass,并在代码中进行了注释。如果我输入的代码有误,请提供帮助。
#ServerAdmin vps-服务器域 ServerName vps-服务器域
DocumentRoot /var/www/
SSLEngine on
SSLCertificateKeyFile /etc/ssl/private/vps-server-domain_private.key
SSLCertificateFile /etc/ssl/certs/vps-server-domain.crt
SSLCertificateChainFile /etc/ssl/certs/vps-server-domain.ca-bundle
# SSLProxyEngine On
# ProxyRequests Off
# ProxyPass "/wss/" "ws://vps-server-domain:19994/"
# ProxyPass "/wss2/" "ws://vps-server-domain:19994/"
# ProxyPass /wss2/ "ws://vps-server-domain:19994/"
# ProxyPass /ws/ wss://vps-server-domain:19994/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
# RewriteEngine on
# RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
# RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
# RewriteRule .* wss://vps-server-domain:19994%{REQUEST_URI} [P]
如果我在Web门户中使用http,并在Websocket中使用“ ws”,则一切正常。
所以当我在VPS中集成SSL时,我不明白为什么“ wss”不能与“ https”一起使用。
还有其他方法可以告诉websocket使用SSL文件吗?
我想念什么吗?
您的帮助对我来说非常重要。
非常感谢你, 提前新年快乐。