2017-01-09 32 views
0

CloudFlareをCDN /保護に使用してNode.JS + Socket.IOでApacheを実行しようとしていますが、問題が起こっています。私はこれが520 HTTPエラーを与えるProxyPassディレクティブApache + Node.JS + Socket.IO + CloudFlare // SSLエラー

<VirtualHost *:80> 
    ServerName  play.example.me 
    ServerAlias  example.me 
    DocumentRoot /home/web/ 
    AccessFileName .htaccess 

    <Proxy *> 
     Order deny,allow 
     Allow from all 
    </Proxy> 

    ProxyRequests off 

    <Location /socket.io> 
     ProxyPreserveHost On 
     ProxyPass   ws://localhost:8080/socket.io/ 
     ProxyPassReverse ws://localhost:8080/socket.io/ 
    </Location> 
</VirtualHost> 

含む(つまり、SSL経由ではない)Socket.IO接続を扱うのApacheに多くの方法をtryiedまし

、それはCloudFlareの一般的なエラーです。

私は、Node.JS + Socket.IOでLet's EncryptのSSL証明書を使用するように試しましたが、ERR_SSL_PROTOCOL_ERRORを与えました。

私はNode.jsの上のサーバーを作成するために使用しているコードは、私が実際にサブドメイン処理するためにはProxyPassを使用してい

var app  = new express(); 
var options = { 
     key: fs.readFileSync("/etc/letsencrypt/live/play.example.me/privkey.pem"), 
     cert: fs.readFileSync("/etc/letsencrypt/live/play.example.me/cert.pem"), 
     ca:  fs.readFileSync("/etc/letsencrypt/live/play.example.me/chain.pem"), 
     requestCert:  false, 
     rejectUnauthorized: false 
    }; 

var server  = require("https").createServer(options, app); 
var io   = require("socket.io").listen(server, { serveClient: false }); 

である「APIを。」 Node.JS/Expressに渡されます。

<VirtualHost *:80> 
    ServerName  api.example.me 
    ServerAlias  example.me 

    ProxyRequests off 

    <Proxy *> 
     Order deny,allow 
     Allow from all 
    </Proxy> 

    <Location /> 
     ProxyPass   http://localhost:8080/ 
     ProxyPassReverse http://localhost:8080/ 
    </Location> 
</VirtualHost> 

これは動作していますが、WebOSocketは動作しません。 Apacheを使用しない場合(Expressで直接実行している場合)、websocketを含め、すべて正常に動作します。しかし、WebサイトがPHPで書かれているので、Apacheを実行する必要もあります。

何か間違っていますか?

あなたが例えば、WebSocketのトラフィックではProxyPassを使用するようにApacheモジュールのmod_proxy_wstunnelを使用することができます

答えて

0

ProxyPass "/ws2/" "ws://echo.websocket.org/" 
ProxyPass "/wss2/" "wss://echo.websocket.org/" 

Apacheのプロキシ経由のWebSocketトラフィックへの本当の必要がない、と述べました。これは、異なるポートからHTTP(S)トラフィックを使用するため、実際の必要はありません。あなたはsocket.ioのようなライブラリを使うことができます。

+0

私はSSLを使用するとSocket.IOを使用していますが、なんらかの理由でERR_SSL_PROTOCOL_ERRORを返します。 –

+0

その後、WSではなくWSSを使用する必要があります。 mod_proxy_wstunnelでProxy Passを使用すると、WSをWSSに変換することができます。代わりに、Javascriptでこれをネイティブに行うこともできます。 http://www.giacomovacca.com/2015/02/websockets-over-nodejs-from-plain-to.html – mjsa

+0

WSをWSSに変換するにはどうすればよいですか?私はSocket.IO上でSSLを使用するためにtryiedしましたが、私が言ったように、それは私にERR_SSL_PROTOCOL_ERRORを与えます。そして、 "ProxyPass ws:// localhost:8080/socket.io /"を使用すると、HTTPエラー520が返されます –

関連する問題