WebSocketサーバーをHTTPSにアップグレードしようとしていますが、何か問題があります。私は、SSL & Co.で気取って回り始めました。websocketサーバーはノードで書かれており、websocketだけを扱い、フロントサーバーはApacheであり、クライアントアプリケーションを提供します。WebSocketサーバーへのApacheのプロキシは機能しません
のWebSocket側(基本的に)である:ws = new WebSocket("wss://dev.domain/ws");
と線がトリガされたときにChromeは威嚇を言う:
<VirtualHost *:443>
ServerName dev.domain
DocumentRoot /var/www/domain/client_dev
<Directory /var/www/domain/client_dev/>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
CustomLog ${APACHE_LOG_DIR}/access.log common_complete
<IfModule mod_dir.c>
DirectoryIndex index.php index.pl index.cgi index.html index.xhtml $
</IfModule>
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /etc/letsencrypt/live/domain/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/domain/fullchain.pem
<Location "/ws/">
ProxyPass "wss://localhost:36245/ws"
</Location>
<FilesMatch "\.(cgi|shtml|phtml_php)$">
SSLOptions +StdEnvVars
</FilesMatch>
</VirtualHost>
テストクライアントは、次の行を有しているバーチャルホスト
const websock = require('./node_modules/ws');
const fs = require('fs');
console.log("Starting VoxelatedAvacado server.");
const server = require('https').createServer({
cert: fs.readFileSync('/etc/letsencrypt/live/domain/cert.pem'),
key: fs.readFileSync('/etc/letsencrypt/live/domain/privkey.pem'),
port: 36245
});
const wss = new websock.Server({ server: server, path: "/ws"});
とApache WebSocket connection to 'wss://dev.domain/ws' failed: Error during WebSocket handshake: Unexpected response code: 404
。 Apacheのエラーログには行は表示されません。
ありがとうございました!