PHP websockets 不适用于 wss ://

标签 php ssl nginx websocket ratchet

我将网站移至 https://。 在 http 到套接字上有一个通过 ws://sitename.com: 3003 的连接,现在它们必须在 wss://sitename.com: 3003 上可用。 我该怎么做呢? 谢谢。

PHP:

$loop   = React\EventLoop\Factory::create();
$context = new React\ZMQ\Context($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:3004');
$pull->on('message', array($pusher, 'onMessage'));

$webSock = new React\Socket\Server($loop);
$webSock->listen(3003, '0.0.0.0');
$webServer = new Ratchet\Server\IoServer(
  new Ratchet\Http\HttpServer(
    new Ratchet\WebSocket\WsServer(
      new Ratchet\Wamp\WampServer(
        $pusher
      )
    )
  ),
  $webSock
);

$loop->run();

JS:

window.phpSocket = new ab.Session('wss://sitename.com:3003',

nginx:

server {
    listen   443 ssl;
    keepalive_timeout   70;

    client_max_body_size    500M;
    root /var/www/path/to/site/root;
    index index.php;
    server_name sitename.com;
    gzip_static on;
    gzip            on;
    gzip_min_length 1000;
    gzip_proxied    expired no-cache no-store private auth;
    gzip_types      text/plain application/xml text/css text/javascript application/javascript;


    ssl                     on;
    ssl_certificate         /etc/letsencrypt/live/sitename.com/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/sitename.com/privkey.pem;
    ssl_session_cache       shared:SSL:10m;
    ssl_session_timeout     10m;

最佳答案

因为你的 nginx conf 没有指定如何将你的客户端 wss 转发到你在 3003 监听的服务器端口。

你应该在 nginx.conf 中将它添加到你的服务器 block

location /wss/ {
    proxy_pass http://localhost:3003;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

并将您的 Js 代码更改为:

window.phpSocket = new ab.Session('wss://sitename.com/wss/',

更多关于如何使用nginx作为websocket_proxy的信息,请引用https://www.nginx.com/blog/websocket-nginx/

关于PHP websockets 不适用于 wss ://,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45737771/

相关文章:

php - 对加拿大 SMS 网关提供商的建议

php - 简单的子域重定向 PHP

当存在多个虚拟主机标签 Ubuntu14.04 时,Apache 2.4.7 重定向不起作用

到 Cloudant 的 NGINX 代理

redirect - 在 nginx 重定向中将未知子域中的下划线替换为破折号

php - 通过 WC_Admin_Report 按产品名称生成订单报告

c# - 获取请求的 SSL 证书

amazon-web-services - 为域设置 https 的问题。文件在 Amazon Beanstalk 上

django - 重定向到正确的本地化 : Nginx, Apache、memcached 和 Django

javascript - PHP if 语句基于屏幕尺寸