Я пытаюсь запустить Ratchet.io через SSL (эта проблема: php ratchet websocket SSL connect?).
Мой веб-сервер работает на myhost.mobi, и я создал отдельный виртуальный хост для службы websocket "wws.myhost.mobi".
Мой веб-разъем:
$webSock = new React\Socket\Server($loop);
$webSock->listen(8080, '0.0.0.0');
$webServer = new Ratchet\Server\IoServer(
new Ratchet\Http\HttpServer(
new Ratchet\WebSocket\WsServer(
new Ratchet\Wamp\WampServer(
$pusher
)
)
),
$webSock
);
My nginx config (я на nginx 1.5.8):
upstream websocketserver {
server localhost:8080;
}
server {
server_name wss.myapp.mobi;
listen 443;
ssl on;
ssl_certificate /etc/ssl/myapp-mobi-ssl.crt;
ssl_certificate_key /etc/ssl/myapp-mobi.key;
access_log /var/log/wss-access-ssl.log;
error_log /var/log/wss-error-ssl.log;
location / {
proxy_pass http://websocketserver;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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-Forwarded-Proto https;
proxy_read_timeout 86400; # neccessary to avoid websocket timeout disconnect
proxy_redirect off;
}
}
Моя клиентская сторона script:
var conn = new ab.Session('wss://wss.myapp.mobi', function(o) {
// ...
}, function() {
console.warn('WebSocket connection closed');
}, {
skipSubprotocolCheck: true
});
Итак, когда я загружаю страницу в Firefox, я вижу исходящее соединение с wss://wss.myapp.mobi: 8080/, которое висит (прядильщик) и никогда не завершается или не умирает. Я не вижу никаких следов запроса, поступающего на бэкэнд в журналах.
Что мне там не хватает?
Спасибо!
EDIT Я понял, что должен подключаться к wss://wss.myapp.mobi, но теперь я получаю статус "101 Switching Protocols".
РЕДАКТИРОВАТЬ 2 Теперь все работает с приведенной выше конфигурацией. Статус "101 Switching Protocols" становится обычным сообщением. ПРОБЛЕМА РЕШЕНА!