Как исправить ошибку «Соединение WebSocket с« wss: // <url>»не удалась: истекло время ожидания открытия WebSocket»? - PullRequest
1 голос
/ 23 марта 2019

Я установил приложение PHP на моем VPS-сервере, предоставленном Hostgator.Приложение также включает реализацию веб-сокета, использующую cboden/ratchet для порта 8080.Вот код для запуска сервера websocket.

require_once __DIR__ . '/vendor/autoload.php';

$server = Ratchet\Server\IoServer::factory(
    new Ratchet\Http\HttpServer(
        new Ratchet\WebSocket\WsServer(
            new ChatSocket()
        )
    ),
    8080
);

$server->run();

Соединение websocket работает нормально при протоколе ws, но протокол wss выдает ошибку на стороне клиента.

WebSocket connection to 'wss://<domain>:8080' failed: WebSocket opening handshake timed out

На сервере VPS есть Apache и Nginx.И nginx проксирует запросы к apache.HTTP, HTTPS и WS работают совершенно нормально, но для использования HTTPS на стороне клиента необходимо настроить WSS.Основной домен защищен с помощью SSL-сертификата Позволяет зашифровать.

Вот конфигурация nginx:

server {
    listen <server-ip>:443 ssl http2;

    server_name <domain-name>;
    server_name <domain-name>;
    server_name <domain-name>;

    ssl_certificate             /opt/psa/var/certificates/<file-name>;
    ssl_certificate_key         /opt/psa/var/certificates/<file-name>;
    ssl_client_certificate      /opt/psa/var/certificates/<file-name>;

    client_max_body_size 128m;

    root "/var/www/vhosts/<subdomain-dir>/public";
    access_log "/var/www/vhosts/system/<subdomain-dir>/logs/proxy_access_ssl_log";
    error_log "/var/www/vhosts/system/<subdomain-dir>/logs/proxy_error_log";

    #extension letsencrypt begin
    location /.well-known/acme-challenge/ {
        root /var/www/vhosts/default/htdocs;

        types { }
        default_type text/plain;

        satisfy any;
        auth_basic off;
        allow all;

        location ~ ^/\.well-known/acme-challenge.*/\. {
            deny all;
        }
    }
    #extension letsencrypt end

    location / {
        proxy_pass https://<server-ip>:7081;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Accel-Internal /internal-nginx-static-location;
        access_log off;

    }

    location /internal-nginx-static-location/ {
        alias /var/www/vhosts/<subdomain-dir>/public/;
        internal;
    }


    add_header X-Powered-By PleskLin;

}

server {
    listen <server-ip>:80;

    server_name <domain-name>;
    server_name <domain-name>;
    server_name <domain-name>;

    client_max_body_size 128m;

    return 301 https://$host$request_uri;
}

Подскажите, как настроить WSS?

...