NGINX 1.11.3 mainline с OpenSSL 1.0.2h и ngx_brotli для Red Hat Enterprise Linux и CentOS

В репозиторий добавлен NGINX 1.11.3 mainline-версии, собранный статически с OpenSSL 1.0.2h.

Ссылки:

Или же воспользуйтесь нашим репозиторием.

Переход с расширения mongo на mongodb для PHP

Этой статье я расскажу о своем опыте миграции с устаревшего mongo PHP extension на mongodb. Расширения имеют абсолютно разный API. Поэтому есть смысл применить для нового более высокоуровневую абстракцию.

Я для этой цели использовал MongoDB PHP Library. У этой библиотеки API достаточно близок к старой версии. В документации есть upgrade guide, но без примеров. При этом есть куча мелких отличий, которые, в свою очередь, чреваты кучей багов. Ниже перечислю основные, из тех с которыми пришлось столкнуться:

1. Подключение.

Теперь подключение выглядит так:

$client = new \MongoDB\Client(
    'mongodb://rs1.example.com,rs2.example.com/?replicaSet=myReplicaSet',
    [
        'readPreference' => 'secondaryPreferred'
    ]
);

C аутентификацией (для пароля нужно добавить urlencode):

 mongodb://username:password@rs1.example.com,rs2.example.com/

Если указать реплику и аутентификацию в параметрах (как было раньше) — работать не будет.

2. Объекты от старого расширения.

Используйте $db->collectionName вместо new \MongoCollection($db, ‘collectionName’).
\MongoRegex меняется на \MongoDB\BSON\Regex и принимает другие параметры на вход.
\MongoId заменен на \MongoDB\BSON\ObjectID.
Это наиболее часто используемые классы. Если используется что то еще — ищите аналоги в документации.

3. Методы find\findOne.

Теперь вместо массива будет возвращаться объект \MongoDB\Model\BSONDocument. На первый взгляд он может работать так же как массив. Но тут нужно быть осторожным. Потому что если в старом коде используется что то типа is_array(), array_merge() и т.д., в применении к такому объекту, работать это не будет.
Второй параметр теперь options. Если нужно задать список возвращаемых полей, используйте параметр projection в options:
$collection->find([], [‘projection’ => [‘id’, ‘name’, ‘email’]])
В новой библиотеке нет методов limit(), offset(), skip(), order(), nextOne(). Вместо использования методов добавляейте эти параметры в options. Например:

$collection->find([], [
    'skip' => 10,
    'limit' => 10,
    'sort' => [‘name’ => -1]
]);

*Строка в параметре limit теперь вызовет fatal error.
Так же, теперь нельзя применить метод count к курсору. Можно использовать 
$collection->count(), но не $collection->find()->count().

4. Метод update.

Теперь для этой цели много новых методов. И как с ними работать далеко не всегда очевидно.
Для себя я выбрал три:
updateOne([‘name’ => ‘foo’], [‘$set’ => [‘title’ => ‘test’, ...]]) — если нужно обновить только часть объекта. Переданный параметр ‘_id’ вызовет fatal error.
findOneAndReplace([‘name’ => ‘foo’], $fullObject) — если нужно переписать объект целиком. ‘_id’ должен быть объектом, не строкой.
updateMany([‘name’ => ‘foo’], [‘$set’ => [‘title’ => ‘test’, ...]]) — работает аналогично с updateOne.
Все эти методы возвращают MongoDB\UpdateResult, а не обновленный объект, как было раньше.

5. Остальное.

Некоторые методы были просто переименованы, например remove(), insertMany(). Практически во всех методах поменялись возвращаемые параметры.
Insert был заменен на insertOne и возвращает MongoDB\InsertOneResult.
Формат результатов в методе aggregate() был изменен.
Смотрите upgrade guide насчет других изменений.

Apache httpd 2.4.23, собранный с OpenSSL 1.0.2h и поддержкой http2 для Red Hat Enterprise Linux и CentOS

В репозиторий добавлен Apache httpd 2.4.23 с поддержкой http2 для Red Hat Enterprise Linux и CentOS. Mod_ssl собран статически с OpenSSL 1.0.2h.

Ссылки:

Или же воспользуйтесь нашим репозиторием.

Обращаю ваше внимание на тот факт, что в зависимостях пакета присутствуют apr-util 1.5.0+ и libnghttp, которые я бы рекомендовал взять из репозитория EPEL. Таким образом, для использования Apache HTTPd проще всего подключить репозиторий EPEL:

yum install -y epel-release

В выпуске 2.4.23, в котором представлено 36 изменений, 17 из которых связаны с исправлениями в модуле mod_http2. Выпуски 2.4.21 и 2.4.22 были пропущены, следом за 2.4.20 сразу опубликован релиз 2.4.23.

В новом выпуске устранена уязвимость (CVE-2016-4979), которая позволяет обойти аутентификацию на основе клиентских сертификатов X509. Проблема проявляется только в системах, использующих HTTP/2, и позволяет получить доступ к ресурсам, без предоставления необходимого для аутентификации сертификата. Уязвимы версии httpd c 2.4.18 по 2.4.20 в которых активирован модуль mod_http2.

Из изменений, не связанных с безопасностью и исправлением ошибок, можно отметить реализацию в mod_include конструкции «‹!—#comment текст комментария›» для определения комментариев в файлах SSI, а также добавление новой директивы CGIVar, при помощи которой можно определить правило заполнения переменной окружения REQUEST_URI (original-uri для изначально запрошенного URI и current-uri для текущего URI).

NGINX 1.11.2 mainline с OpenSSL 1.0.2h и ngx_brotli для Red Hat Enterprise Linux и CentOS

В репозиторий добавлен NGINX 1.11.2 mainline-версии, собранный статически с OpenSSL 1.0.2h.

Ссылки:

Или же воспользуйтесь нашим репозиторием.