Я использую версию nginx: 1.12.1 за машиной CloudFlare. На передней панели CloudFlare включен http2.
Мне было интересно, стоит ли перейти на Nginx 1.9.5, поддерживающий http2 ? Стоимость обновления значительна. Мой Linode centos - это
centos-релиз-7-3.1611.el7.centos.x86_64
а пакет Nginx по умолчанию, который поставляется через репозиторий rpm, по-прежнему находится на Nginx 1.12.
Приносит ли обновление версии Nginx на машинах CloudFlare значительные преимущества?
Редактировать: Красить меня наивно, но я думал, что 1,12 ниже 1,9. Я такой глупый. Вернемся ко второму вопросу, оказывает ли это влияние?
CloudFlare не имеет доступа к исходным серверам через HTTP / 2, только HTTP / 1.1. Я могу подтвердить это, просмотрев журналы моего сервера.
Из-за этого нет смысла включать HTTP / 2, если к вашему серверу имеет доступ только CloudFlare.
Обновить
Чтобы расширить ответ, CloudFlare использует HTTP / 2 между своим CDN и клиентским браузером. Это дает прирост производительности для браузера. Внутреннее соединение с источником менее важно, потому что на большинстве веб-сайтов большинство ресурсов кэшируется.
Возможно, это могло бы немного ускорить процесс, если бы они использовали HTTP / 2, но это хорошая компания, и если это будет полезно, они со временем это сделают.
Как уже упоминалось, Cloudflare в настоящее время не передает HTTP / 2 на исходные серверы, поэтому реализация HTTP / 2 на вашем исходном сервере не дает особых преимуществ.
Основным преимуществом HTTP / 2 является соединение с низкой задержкой, например соединение браузера с сервером, которое Cloudflare уже использует для обслуживания ресурсов через HTTP / 2. От сервера к серверу преимуществ меньше.
Кроме того, Cloudflare использует версию Nginx и в настоящее время не поддерживает HTTP / 2 на стороне сервера и Nginx заявил, что не собирается его добавлять:
Планируется ли поддержка прокси HTTP / 2 в ближайшем будущем?
Короткий ответ:
Нет, нет никаких планов.
Длинный ответ:
Практически нет смысла реализовывать его, поскольку основное преимущество HTTP / 2 заключается в том, что он позволяет мультиплексировать множество запросов в одном соединении, таким образом [почти] снимая ограничение на количество одновременных запросов - и такого ограничения нет при разговоре с ваши собственные серверы. Более того, при использовании HTTP / 2 для бэкэндов ситуация может даже ухудшиться из-за использования одного TCP-соединения вместо нескольких.
С другой стороны, реализация протокола HTTP / 2 и мультиплексирование запросов в рамках одного соединения в восходящем модуле потребует серьезных изменений в восходящем модуле.
В связи с вышеизложенным, нет планов по внедрению поддержки HTTP / 2 в восходящем модуле, по крайней мере, в обозримом будущем. Если вы все еще думаете, что общение с серверными модулями через HTTP / 2 необходимо - не стесняйтесь предоставлять исправления.
Вы можете согласиться или не согласиться с вышеизложенным, но это казалось довольно определенным, когда оно было написано (в 2015 году), и с тех пор не было обновлений, хотя запрос билета для этого был повторно открыт 4 месяца назад и был оставлен открытым.
Это не означает, что Cloudflare не пойдет дальше и не сделает это самостоятельно (как это было с Server Push до того, как Nginx поддержал это), но я бы сказал, что это менее вероятно, поскольку основная платформа, на которой они основаны, не поддерживает это.
Наконец, вы заявляете, что используете Centos 7.3. У этого есть более старая версия OpenSSL (1.0.1), которая не поддерживает ALPN, необходимый для разрешения HTTP / 2 для браузеров на основе Chromium (Chrome и Opera) и, возможно, большего количества таких клиентов HTTP / 2 в будущем, поэтому это вполне может потребоваться с будущей реализацией Cloudflare. Недавно выпущенный Centos 7.4 действительно включает OpenSSL 1.0.2, который теоретически поддерживает ALPN, но упакованные версии Nginx на момент написания все еще скомпилированы с более старой версией, так что это не помогает (пока). См. Это сообщение в блоге для получения более подробной информации. Таким образом, речь идет не только об обновлении Nginx, но также ОС и / или OpenSSL, и даже тогда это не поможет в данный момент. Конечно, есть способы обойти это (установка из источника, запуск его в образе Docker вместо этого ... и т. Д.), Но если вы говорите, что стоимость обновления одного только Nginx значительна, тогда я полагаю, что эти дополнительные вещи действительно собираются поставить гвоздь в том гробу.
В общем, я бы сказал, что пока оставайтесь достаточно хорошо и просто наслаждайтесь тем фактом, что Cloudflare обеспечивает поддержку HTTP / 2 и заботится о ней. Фактически, один из самых простых способов получить HTTP / 2, учитывая все проблемы, упомянутые выше, - это использовать такую службу, как Cloudflare, и не беспокоиться о реализации этого в своей собственной инфраструктуре.
centos-release-7.3.1611.el7.centos.x86_64
это версия CentOS, которую вы установили, а не версия nginx.
nginx 1.12.1, который вы в настоящее время установили, является значительно более новой версией, чем 1.9.5 (поскольку 12 больше 9). Если используемые вами двоичные файлы были созданы с включенным http2, вы сможете использовать эту функцию, не меняя версию nginx.
Вы говорите, что у вас установлен Nginx 1.12.1 и (правильно), что Nginx поддерживает HTTP / 2 с версии 1.9.5.
Поскольку у вас уже есть более новая версия, я не совсем понимаю, почему вы говорите о необходимости обновления. (Похоже, на данный момент у вас последняя стабильная версия.)
Похоже, что у вас все должно быть настроено по версии и, вероятно, просто нужно изменить конфигурацию (добавить http2
к соответствующему ssl listen
директивы).