r0n1x
@r0n1x
html, css, js

Nodejs + expressjs + http2?

Собственно решил перевести сайт на https. Получил сертификат.

const   
    fs = require('fs'),
    express = require('express'),
    app = express(),
    http = require('http'),
    http2 = require('http2'),
    https = require('https'),
    spdy = require('spdy');

app.use(express.static(__dirname + '/public'));

const 
    credentials = {
        key: fs.readFileSync('./sslcert/privkey.pem', 'utf8'),
        cert: fs.readFileSync('./sslcert/cert.pem', 'utf8'),
        ca: fs.readFileSync('./sslcert/chain.pem', 'utf8')
    };

http
    .createServer(app)
    .listen(80, (error) => {
        if (error) {
            console.error(error)
            return process.exit(1)
        } else {
            console.log('Listening on port: 80.')
        }
    });

https
    .createServer(credentials, app)
    .listen(443, (error) => {
        if (error) {
            console.error(error)
            return process.exit(1)
        } else {
            console.log('Listening on port: 443.')
        }
    });


Единственный "рабочий" вариант, НО до сих пор отображается HTTP/1.1.
Пробовал с помощью spdy - ошибка "RangeError: Invalid typed array length: -4095".
Через http2 сайт вообще отказывается открываться.

Кто сталкивался с переездом? По какому мануалу делали и как получилось?

https://dassur.ma/things/h2setup/ https://webapplog.com/http2-node/ пробовал, в частности, по этим рекомендациям\мануалам
  • Вопрос задан
  • 2787 просмотров
Пригласить эксперта
Ответы на вопрос 3
virtual_hack2root
@virtual_hack2root
.NET Core, JS, DevOps
Во первых, http2 не используйте с традиционными сайтами, построенными под HTTPS 1.1, никакого бонуса фактические вы не ощутите. Проблема в том, что предзагрузка ресурсов может работать медленнее чем параллельная загрузка ресурсов по требованию, если вы заранее не спроектируете ваше приложение под http2. Во-вторых, http2 - формат бинарный, а не текстовый, у него есть лишь некоторая поддержка, и не для всех мобильных браузеров, в частности полная поддерджка осуществляется на связке chrome, и apache, однако не для всех платформ. В третьих, сертификат легче прописывать и автоматизировать его выписку с помощью настройки NGINX-а и бесплатного бота Let's Encrypt для NGINX. Да и переезд на https под NGINX сводится к элементарым операйциям, а ваш сайт как работал в http так пусть и работает, не надо его трогать. Меняйте конфиги у NGINX и пропишите все необходимое там, а если лень, то за вас это сделает бот Let's Encrypt
Ответ написан
Я просто в nginx прописал http2 и всё норм отображается, те клиенты которые могут использовать http2 получают его те кто нет получают 1.1, гугл дал доп балы по СЕО за это.

Там где бот предложеный выше ставит настройки сертификата нужно просто дописать http2
listen 443 ssl http2
Ответ написан
Комментировать
student_ivan
@student_ivan
Web-Developer, Front-End Engineer
Node SPDY забили на разработку окончательно. Как вариант использовать node lts v10.x.x для локального сервера. Для продакшна как вариант пропускать pm2 через CDN (например fastly). Между этой связкой можно добавить ещё и балансер (например от digitalocean). А вообще сам искал как решить эту проблему и вот сюда меня гугл привёл.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы