[英]Using Socket.IO with Apache, Node.js, SSL and CloudFlare (HTTP 500)
[英]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.