Я пытаюсь запустить Apache с Node.JS + Socket.IO с помощью Cloudflare для CDN/защиты, но что-то не так.Apache + Node.JS + Socket.IO + CloudFlare // Ошибка SSL
Я tryied много способов 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.
Я попытался использовать сертификат SSL из Let's Encrypt на Node.JS + Socket.IO, но он дает 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 для обработки поддомена «апи.» , который передается в 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>
Это работает, но нет веб-узла. Без Apache (работает непосредственно на Express) все работает отлично, включая веб-раскладку. Но мне также нужно запустить Apache, потому что веб-сайт написан на PHP.
Я что-то не так?
Я использую Socket.IO, но по какой-то причине он дает мне ERR_SSL_PROTOCOL_ERROR, когда я пользуюсь SSL. –
Затем вам необходимо использовать WSS вместо WS. Используя прокси-пропуск с mod_proxy_wstunnel, вы можете конвертировать WS в WSS, иначе вы можете посмотреть здесь, сделав это изначально с помощью Javascript. http://www.giacomovacca.com/2015/02/websockets-over-nodejs-from-plain-to.html – mjsa
Как преобразовать WS в WSS? Я попытался использовать SSL на Socket.IO, но, как я уже сказал, он дает мне ERR_SSL_PROTOCOL_ERROR. И когда я использую «ProxyPass ws: // localhost: 8080/socket.io /», он дает мне HTTP-ошибку 520 –