Websocket无法在Apache中使用WSS

时间:2018-12-29 14:44:54

标签: php websocket ratchet phpwebsocket

让我详细解释整个情况:

我们有两台服务器: -一个共享主机 -其他是VPS

我们的要求是在项目中设置Websocket。但是,共享主机不允许打开自定义端口。因此我们决定购买另一台“ VPS”服务器。

检查下图:

enter image description here

如上图所示,我们的网络门户使用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文件吗?

我想念什么吗?

您的帮助对我来说非常重要。

非常感谢你, 提前新年快乐。

0 个答案:

没有答案