簡體   English   中英

Apache + Node.JS + Socket.IO + CloudFlare // SSL錯誤

[英]Apache + Node.JS + Socket.IO + CloudFlare // SSL Error

我正在嘗試使用Cloudflare為CDN /保護使用Node.JS + Socket.IO運行Apache,但是出了點問題。

我嘗試了很多方法來處理Apache的Socket.IO連接(不是通過SSL),包括ProxyPass

<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> 

這給出520 HTTP錯誤,這是Cloudflare的一般錯誤。

我嘗試使用Node.JS + Socket.IO上的“讓我們加密”中的SSL證書,但是它提供了ERR_SSL_PROTOCOL_ERROR。

我用來在Node.JS上創建服務器的代碼是

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 });

我實際上是使用ProxyPass來處理子域“ 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在內的所有組件都可以正常工作。 但是,我也需要運行Apache,因為該網站是用PHP編寫的。

難道我做錯了什么?

您可以使用Apache Module mod_proxy_wstunnel將ProxyPass與WebSocket通信一起使用,例如:

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

也就是說,並沒有真正需要通過Apache代理Websocket通信的需求。 它使用不同的端口來傳輸HTTP(S)流量,因此沒有必要。 您應該只能夠使用socket.io之類的庫就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM