Configure error the http image filter module requires the gd library

How to compile dynamic modules for NGINX (HTTP Redis as an example) Connecting additional modules to NGINX is not the most trivial thing for web developers. Consider this task in the example build NGINX with the HTTP Redis module (ngx_http_redis). Previously, to connect modules to NGINX, it was necessary to fully compile both the […]

Содержание

  1. How to compile dynamic modules for NGINX (HTTP Redis as an example)
  2. Configure
  3. NGINX update
  4. Issues and problems
  5. «Configure» issues
  6. Connectivity issues
  7. Добавление модулей nginx в Linux (Debian/Ubuntu/CentOS/AlmaLinux)
  8. Добавление модулей nginx в Linux (Debian/Ubuntu/CentOS /AlmaLinux)
  9. checking for GD library in /opt/local/ . not found ( Application failed ) #416
  10. Comments
  11. Русские Блоги
  12. Сервис Nginx (5) — Фильтрация и сжатие изображений Nginx
  13. Каталог статей
  14. Введение
  15. 1. Почему нам нужно сжимать изображения или веб-страницы?
  16. 2. Реализация сжатия изображения веб-страницы
  17. 3. Параметры функции сжатия
  18. Два, сжатие изображения
  19. Во-вторых, реализовать сжатие веб-страницы

How to compile dynamic modules for NGINX (HTTP Redis as an example)

Connecting additional modules to NGINX is not the most trivial thing for web developers. Consider this task in the example build NGINX with the HTTP Redis module (ngx_http_redis).

Previously, to connect modules to NGINX, it was necessary to fully compile both the web server and the required modules, but starting from version 1.9.11, you don’t have to do that. Just use the make modules command, but you need to correctly configure the entire NGINX build.

So, first you need to know which version of NGINX is installed. If less than 1.9.11, then read Installing the latest NGINX.

Download and unpack to the home directory the same version of NGINX (in our case 1.13.5):

Download and unpack HTTP Redis module:

So, we should have:

1. Installed and running NGINX> = 1.9.11

2. NGINX distribution of the same version as in clause 1

3. Downloaded HTTP Redis module

Now we can compile the module and connect it in the nginx.conf file with the command load_module my_module.so.

We need to know the current NGINX build configuration (remember result of this command):

Go to the directory where you unpacked the downloaded NGINX:

Preparing for the build. It takes place in two stages: «configure» and «make«.

Configure

You need to run the ./configure command with the options that were shown in nginx -V. In my case (Ubuntu 16, nginx 1.13.5) it looks like:

At the end, the path to the dynamic module is added, which needs to be compiled (we are in the

/nginx-1.13.5 directory). Don’t forget to add it:

Press Enter. If you are lucky and there are no errors in the output, great!

Next, make a module:

If there are no errors, you will have a file:

nginx-1.13.5/objs/ngx_http_redis_module.so

To connect this module to NGINX, you need to add a line with load_module to the /etc/nginx/nginx file.conf. To the top. Specify the full path to the file:

If there is no error message, then everything is worked! You can copy the ngx_http_redis_module.so file to a more suitable place. And do not forget to change the path to it in nginx.conf.

NGINX update

The module is tied to a specific version of NGINX, if we update it, then most likely it will stop working. So you need the NGINX package to put on hold — block package from updates:

Issues and problems

«Configure» issues

1. The build configuration fails, the ./configure command returns an error (you cannot run make modules after this).

Errors like this:

In this example, if we change the configuration (to pass ./configure) and put —without-http_gzip_module, most likely, at the connection stage, the module will not work with nginx (see below).

In the process, there may be different requirements for libraries that are needed for the NGINX build (or not).These packages may need to be installed (or may already be installed):

1. «./configure: error: C compiler cc is not found»

4. HTTP XSLT module requires the libxml2/libxslt

5. «. the HTTP image filter module requires the GD library»

7. PAM authentication module

Connectivity issues

When the module was compiled but the connection to NGINX is not working:

— Module module-name.so was compiled, but when you restart NGINX, a message is displayed that the version is not correct. In this case it’s necessary to double-check and download the appropriate version.

— «is not binary compatible» an error like this:

This means that the module build is configured incorrectly. You need to deal with ./configure options: incorrectly copied, not all dependencies installed and so on.

Источник

Добавление модулей nginx в Linux (Debian/Ubuntu/CentOS/AlmaLinux)

При установке nginx штатными средствами ОС в Linux ( apt, aptitude, yum, dnf ) нет возможности сконфигурировать его установку, чтобы добавить или убрать какие-либо модули и nginx устанавливается «как есть».

Что же делать, если нам необходимо добавить какой-либо модуль? Правильно, нужно пересобрать nginx вручную. О том, как это правильно сделать в Linux, рассказываем в статье.

Добавление модулей nginx в Linux (Debian/Ubuntu/CentOS /AlmaLinux)

Предположим, для примера, что нам необходимо добавить в nginx модуль http_mp4_module. Вывод команды nginx -V покажет нам, что nginx собран без него.

Сохраним вывод команды nginx -V в какой-нибудь текстовый редактор — эта информация нам пригодится при конфигурировании. Видим, что версия nginx у нас установлена 1.18.0 — скачиваем такую же версию:

Распакуем архив и перейдём в папку nginx-1.18.0:

Далее для сборки нам потребуется установить в систему дополнительные пакеты.

Для Debian/Ubuntu выполняем:

После предложения продолжить установку — Do you want to continue? [Y/n] — нажимаем Y .

Для CentOS/AlmaLinux выполняем:

После предложения продолжить установку — Is this ok [y/d/N] — нажимаем y .

После установки пакетов приступаем к конфигурированию nginx с добавлением модуля http_mp4_module.

Для этого копируем из текстового редактора вывод команды nginx -V , начиная с —prefix= и до первого —add-module= (все присутствующие в выводе —add_module= нам не нужны). После чего пишем в консоли ./configure и вставляем скопированное из редактора. В нашем случае есть вывод:

поэтому просто копируем все, кроме этой строки.

В конец строки добавляем —with-http_mp4_module чтобы получилось так:

Нажимаем Enter и ждём окончания процесса.

В процессе конфигурирования возможно будут появляться ошибки. Способы их устранения описаны ниже.

Для Debian/Ubuntu исправляется установкой libpcre++-dev:

Для CentOS/AlmaLinux исправляется установкой pcre-devel:

Источник

checking for GD library in /opt/local/ . not found ( Application failed ) #416

When using ngx_mruby to build application it fails as below.

checking for GD library in /usr/local/ . not found
checking for GD library in /usr/pkg/ . not found
checking for GD library in /opt/local/ . not found

./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries.

It looks like something went wrong

Please read our documentation for troubleshooting tips:

If that doesn’t help, please use our support facilities. We’ll do our best to help you.

The text was updated successfully, but these errors were encountered:

@gaukhush I just want to make sure you are trying to build nginx with ngx_mruby and passenger modules?
Could you tell us what operations you have done?

@yyamano thanks for quick reply, last fork 1 month worked to build nignx via ngx_mruby with passenger but when tried yesterday multiple times via ngx_mruby it fails. We call ngx_mruby from repo saturn which is mentioned below and uses passenger version 5.3.3.

if [ whoami != ‘root’ ]; then
echo «This script should be run as root»
exit
fi

echo «=== Switch to branch ===»
cd ngx_mruby
git checkout master

echo «=== Build mruby and others ===»
BUILD_DYNAMIC_MODULE=TRUE sh build.sh
cd ..

echo «=== Clone passenger ===»
git clone https://github.com/phusion/passenger
cd passenger
git checkout release-5.3.3
git submodule update —init —recursive
cd ..

  1. We just invoke build_all.sh which has ngx_mruby all modules to downloan nginx latest and build passenger application.
  2. This started failing at last step as
    `checking for GD library in /usr/local/ . not found
    checking for GD library in /usr/pkg/ . not found
    checking for GD library in /opt/local/ . not found

./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries`

@gaukhush Where can I find build_nginx.sh?
Google gave me too many results:-)

@yyamano its our private repo created in company account. Below is the content of build_nginx.sh. If you need something more on this let me know.

if [ whoami != ‘root’ ]; then
echo «This script should be run as root»
exit
fi

echo «=== Switch to branch ===»
cd ngx_mruby
git checkout master

echo «=== Build mruby and others ===»
BUILD_DYNAMIC_MODULE=TRUE sh build.sh
cd ..

echo «=== Clone passenger ===»
git clone https://github.com/phusion/passenger
cd passenger
git checkout release-5.3.3
git submodule update —init —recursive
cd ..

@gaukhush I can’t reproduce it.
I don’t think it’s a ngx_mruby issue. It’s a nginx configuration or your build env issue.

./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries.

As the message suggests, you need to install the GD library if you want to use the module.

@yyamano agree with you and managed to install dependencies like(libgd, libgeoip, libatomic_ops) finally i below error. Earlier this was not coming, i think passenger repo has some changes done to include these dependencies. Can you check below error and give a thought ?

-Wl,-E -ldl -lpthread -lcrypt /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/LoggingKit.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/Exceptions.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/FileTools/PathManip.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/FileTools/FileManip.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/FileTools/PathSecurityCheck.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/ProcessManagement/Spawn.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/ProcessManagement/Utils.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/Utils/SystemTime.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/Utils/StrIntUtils.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/Utils/StrIntUtilsNoStrictAliasing.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/Utils/IOUtils.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/Utils/Hasher.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/Utils.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/jsoncpp.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/WatchdogLauncher.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/AppTypes.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/Utils/CachedFileStat.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/JsonTools/CBindings.o /usr/local/shopmatic/passenger/buildout/common/libpassenger_common/FileTools/PathManipCBindings.o /usr/local/shopmatic/passenger/buildout/common/libboost_oxt.a -lstdc++ -lpthread -lm -lrt -L/usr/local/shopmatic/ngx_mruby/mruby/build/host/lib -L/usr/local/lib -lmruby -lm -lreadline -lcrypto -lpthread -lpthread -lrt -lpthread -lrt /usr/local/shopmatic/ngx_mruby/mruby/build/host/mrbgems/mruby-redis/hiredis/lib/libhiredis.a -L -lmruby -lstdc++ -lpcre -lssl -lcrypto -ldl -lpthread -lz -lxml2 -lxslt -lexslt -lgd -lGeoIP -latomic_ops
-Wl,-E -fstack-protector-strong -L/usr/local/lib -L/usr/lib/x86_64-linux-gnu/perl/5.22/CORE -lperl -ldl -lm -lpthread -lc -lcrypt
-Wl,-E
/usr/bin/ld: cannot find -lperl
collect2: error: ld returned 1 exit status
objs/Makefile:349: recipe for target ‘objs/nginx’ failed
make[1]: *** [objs/nginx] Error 1
make[1]: Leaving directory ‘/usr/local/shopmatic/ngx_mruby/build_dynamic/nginx-1.15.7’
Makefile:8: recipe for target ‘build’ failed
make: *** [build] Error 2

@gaukhush I’ve never used passenger. I guess you need to install libperl.so or add -L/path/to/libperl/dir.

ok let me check on this.

@gaukhush Did you resolve the issue?

@yyamano thanks for waiting and i got some time lastweek and i was able to resolved by installing multiple libraries as mentioned.

cd /usr/local
sudo wget https://github.com/libgd/libgd/releases/download/gd-2.2.5/libgd-2.2.5.tar.gz
sudo tar -xvof libgd-2.2.5.tar.gz
sudo mv libgd-2.2.5.tar.gz /tmp
cd libgd-2.2.5
sudo ./configure
sudo make
sudo make install

sudo wget https://github.com/ivmai/libatomic_ops/releases/download/v7.6.8/libatomic_ops-7.6.8.tar.gz
sudo tar -xvof libatomic_ops-7.6.8.tar.gz
sudo mv libatomic_ops-7.6.8.tar.gz /tmp
cd libatomic_ops-7.6.8
sudo ./configure
sudo make
sudo make install

sudo apt install libgd-dev
sudo apt install libwebp-dev
sudo apt install libgd-lua
sudo apt install libperl-dev
cd /usr/local/libgd-2.2.5
sudo ./configure —with-webp
sudo make
sudo make install
cd /usr/local/shopmatic
sudo rm -rf *
sudo

Источник

Русские Блоги

Сервис Nginx (5) — Фильтрация и сжатие изображений Nginx

Каталог статей

Введение

1. Почему нам нужно сжимать изображения или веб-страницы?

Независимо от размера системы или веб-сайта, существует соответствующая обработка изображений, создание эскизов, добавление водяных знаков к изображениям и т. Д. Если задействована сторона приложения, требования к обработке этого изображения становятся более важными, поскольку в текущем представлении , Различные размеры экрана клиента вызовут следующие проблемы:

  • Изображение слишком велико, из-за чего приложение медленно загружает изображение;
  • Потребляйте слишком много пользовательского трафика.

На реальных предприятиях ресурсы на сервере nginx должны занимать как можно меньше места. Фактически, веб-страницы и изображения высокой четкости с большим объемом информации занимают большой объем дискового пространства, что не способствует оптимизации производительности сервера.
Следовательно, нам нужно сжать веб-страницы и изображения на сервере и позволить клиенту загрузить их.

2. Реализация сжатия изображения веб-страницы

Функция оптимизации производительности Nginx: сжатие Gzip (значительно увеличивает скорость загрузки страницы), включение функции сжатия Gzip, вы можете сжимать файлы css, js, xml, html веб-сайта во время передачи, повысить скорость доступа, а затем оптимизировать производительность Nginx . После сжатия Gzip размер страницы может быть уменьшен до 30% или даже меньше, чтобы пользователь просматривал страницу намного быстрее. Страницы, сжатые Gzip, должны поддерживаться как браузером, так и сервером. Фактически, это сжатие на стороне сервера. После передачи в браузер браузер распаковывает и анализирует их. Нам не нужно беспокоиться о браузере, потому что большинство текущих браузеров поддерживают парсинг Gzip-страниц.

3. Параметры функции сжатия

параметр Особенности
gzip on Включить сжатие gzip
gzip_ min_ length 1k Используется для установки минимального количества байтов, разрешенных для сжатия
gzip_ buffers 416k Средство применяется для 4 единиц памяти по 16 КБ в качестве кэша потока результатов сжатия, значение по умолчанию должно применяться к тому же пространству памяти, что и исходные данные, для хранения результата сжатия gzip
zip_ http_ version 1.0 Используется для установки и определения версии протокола http, по умолчанию — 1.1, большинство браузеров в настоящее время поддерживают распаковку gzip, но обработка является самой медленной и потребляет ресурсы ЦП сервера.
gzip_ comp level 2 Используется для указания степени сжатия gzip, 1 — наименьшая степень сжатия, а скорость обработки самая высокая; 9 — наибольшая степень сжатия, скорость передачи высокая, но скорость обработки самая низкая, просто используйте значение по умолчанию
gzip_ types text/plain Тип сжатия — включить функцию сжатия, для которой веб-документы
gzip_ vary on Возможность сделать кэширование страниц, сжатых с помощью gzip, на интерфейсном сервере кэширования

Два, сжатие изображения

Шаг 1. Остановите службу и перекомпилируйте. Добавить новый модуль

Ошибка компиляции:

Решение:
установить gd.x86_64 и gd-devel-2.0.35-26.el7.x86_64.rpm

Шаг 2: сделайте компиляцию

Примечание: не удается выполнить установку

Шаг 3. Замените исходный двоичный файл и поместите модуль изображения в указанный каталог хранилища.

Шаг 4: отредактируйте файл конфигурации nginx

Шаг 5. Загрузите изображение и перезапустите службу.

Шаг 6. Используйте curl, чтобы успешно протестировать сжатие изображения.

Тест веб-страницы:
F12 открывает информацию об управлении страницей.
ctrl + shift + delete очистить кеш браузера

Во-вторых, реализовать сжатие веб-страницы

Шаг 1. Отредактируйте файл публикации по умолчанию nginx /usr/local/nginx/html/index.html

Найдите страницу 172.25.1.1, нажмите F12, чтобы вызвать инструмент разработчика, вы увидите, что размер веб-страницы до сжатия составляет 4,44 КБ.

Шаг 2: Измените файл конфигурации /usr/local/nginx/conf/nginx.conf и установите параметры функции сжатия

Шаг 3. Используйте curl, чтобы проверить, успешно ли запущен Gzip

Тест веб-страницы:
F12 открывает информацию об управлении страницей.
ctrl + shift + delete очистить кеш браузера

Источник

1. Purpose

In this post, I would demonstrate how to build nginx from source on ubuntu system.

2. The solution

2.1 Install the dependencies

sudo aptitude install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev libgd-dev libxml2 libxml2-dev uuid-dev

You can replace aptitude with apt.

2.2 Download nginx source code

Download the latest release of nginx:

wget  http://nginx.org/download/nginx-1.20.0.tar.gz

2.3 Compile the nginx source code

Now compile the code:

./configure --prefix=/var/www/html --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --with-pcre  --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-http_ssl_module --with-http_image_filter_module=dynamic --modules-path=/etc/nginx/modules --with-http_v2_module --with-stream=dynamic --with-http_addition_module --with-http_mp4_module

2.4 Solve the the HTTP image filter module requires the GD library error

If you get error like this:

./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries.

You can solve it like following:

aptitude install libgd-dev

The following packages have unmet dependencies:
 libx11-dev : Depends: libx11-6 (= 2:1.6.9-2ubuntu1.2) but 2:1.6.9-2ubuntu1.3 is installed
The following actions will resolve these dependencies:

     Keep the following packages at their current version:
1)     libgd-dev [Not Installed]
2)     libx11-dev [Not Installed]
3)     libxpm-dev [Not Installed]
4)     libxt-dev [Not Installed]



Accept this solution? [Y/n/q/?] n
Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:

     Downgrade the following packages:
1)     libx11-6 [2:1.6.9-2ubuntu1.3 (now) -> 2:1.6.9-2ubuntu1.2 (focal-security, focal-updates)]



Accept this solution? [Y/n/q/?] Y
The following packages will be DOWNGRADED:
  libx11-6
The following NEW packages will be installed:
  fontconfig-config{a} fonts-dejavu-core{a} libfontconfig1{a} libfontconfig1-dev{a} libfreetype-dev{a} libfreetype6-dev{a} libgd-dev libgd3{a} libice-dev{a} libice6{a} libjbig-dev{a} libjbig0{a} libjpeg-dev{a} libjpeg-turbo8{a} libjpeg-turbo8-dev{a} libjpeg8{a} libjpeg8-dev{a}
  libpng-dev{a} libpng-tools{a} libpthread-stubs0-dev{a} libsm-dev{a} libsm6{a} libtiff-dev{a} libtiff5{a} libtiffxx5{a} libvpx-dev{a} libvpx6{a} libwebp6{a} libx11-dev{a} libxau-dev{a} libxcb1-dev{a} libxdmcp-dev{a} libxpm-dev{a} libxpm4{a} libxt-dev{a} libxt6{a} x11-common{a}
  x11proto-core-dev{a} x11proto-dev{a} xorg-sgml-doctools{a} xtrans-dev{a}
0 packages upgraded, 41 newly installed, 1 downgraded, 0 to remove and 0 not upgraded.
Need to get 8638 kB of archives. After unpacking 28.3 MB will be used.
Do you want to continue? [Y/n/?] Y

Then compile again:

./configure --prefix=/var/www/html --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --with-pcre  --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-http_ssl_module --with-http_image_filter_module=dynamic --modules-path=/etc/nginx/modules --with-http_v2_module --with-stream=dynamic --with-http_addition_module --with-http_mp4_module

2.5 Make and install nginx

Now make the nginx binary and install the binary:

2.6 Start nginx

Now start nginx and check the version:

 ⚡ [email protected]  ~/nginx_source/nginx-1.20.0  nginx
 
 ⚡ [email protected]  ~/nginx_source/nginx-1.20.0  ps -ef|grep nginx
root       57486       1  0 16:47 ?        00:00:00 nginx: master process nginx
nobody     57487   57486  0 16:47 ?        00:00:00 nginx: worker process
root       57495   47639  0 16:47 pts/0    00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox nginx

 ⚡ [email protected]  ~/nginx_source/nginx-1.20.0  nginx -v
nginx version: nginx/1.20.0

 ⚡ [email protected]  ~/nginx_source/nginx-1.20.0  nginx -V
nginx version: nginx/1.20.0
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --prefix=/var/www/html --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --with-pcre --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-http_ssl_module --with-http_image_filter_module=dynamic --modules-path=/etc/nginx/modules --with-http_v2_module --with-stream=dynamic --with-http_addition_module --with-http_mp4_module

It works!

3. Summary

In this post, I demonstrated how to build nginx from source and how to solve relavant compiling problems. That’s it, thanks for your reading.

@yyamano thanks for quick reply, last fork 1 month worked to build nignx via ngx_mruby with passenger but when tried yesterday multiple times via ngx_mruby it fails. We call ngx_mruby from repo saturn which is mentioned below and uses passenger version 5.3.3.

`#!/bin/bash -e

if [ whoami != ‘root’ ]; then
echo «This script should be run as root»
exit
fi

SOURCE=»${BASH_SOURCE[0]}»
SOURCE_DIR=»$( dirname «$SOURCE» )»

echo «=== Cloning ngx_mruby ===»
git clone https://github.com/gaukhush/ngx_mruby.git

echo «=== Switch to branch ===»
cd ngx_mruby
git checkout master

echo «=== Build mruby and others ===»
BUILD_DYNAMIC_MODULE=TRUE sh build.sh
cd ..

echo «=== Clone passenger ===»
git clone https://github.com/phusion/passenger
cd passenger
git checkout release-5.3.3
git submodule update —init —recursive
cd ..

$SOURCE_DIR/build_nginx.sh`

  1. We just invoke build_all.sh which has ngx_mruby all modules to downloan nginx latest and build passenger application.
  2. This started failing at last step as
    `checking for GD library in /usr/local/ … not found
    checking for GD library in /usr/pkg/ … not found
    checking for GD library in /opt/local/ … not found

./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries`

При установке nginx штатными средствами ОС в Linux (apt, aptitude, yum, dnf) нет возможности сконфигурировать его установку, чтобы добавить или убрать какие-либо модули и nginx устанавливается «как есть».

Что же делать, если нам необходимо добавить какой-либо модуль? Правильно, нужно пересобрать nginx вручную. О том, как это правильно сделать в Linux, рассказываем в статье.

Добавление модулей nginx в Linux (Debian/Ubuntu/CentOS/AlmaLinux)

Предположим, для примера, что нам необходимо добавить в nginx модуль http_mp4_module. Вывод команды nginx -V покажет нам, что nginx собран без него.

nginx -V

Результат:

nginx version: nginx/1.18.0 (Ubuntu)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-lUTckl/nginx-1.18.0=. 
-fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time 
-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC' 
--prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log 
--error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid 
--modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body 
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy 
--http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug 
--with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module 
--with-http_realip_module --with-http_auth_request_module --with-http_v2_module 
--with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module 
--with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic 
--with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic 
--with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module

Сохраним вывод команды nginx -V в какой-нибудь текстовый редактор — эта информация нам пригодится при конфигурировании. Видим, что версия nginx у нас установлена 1.18.0 — скачиваем такую же версию:

wget http://nginx.org/download/nginx-1.18.0.tar.gz

Распакуем архив и перейдём в папку nginx-1.18.0:

tar -xvf nginx-1.18.0.tar.gz
cd nginx-1.18.0

Далее для сборки нам потребуется установить в систему дополнительные пакеты.

Для Debian/Ubuntu выполняем:

apt install build-essential 

После предложения продолжить установку — Do you want to continue? [Y/n] — нажимаем Y.

Для CentOS/AlmaLinux выполняем:

yum install gcc gcc-c++ kernel-devel
yum groupinstall 'Development Tools'

После предложения продолжить установку — Is this ok [y/d/N] — нажимаем y.

После установки пакетов приступаем к конфигурированию nginx с добавлением модуля http_mp4_module.

Для этого копируем из текстового редактора вывод команды nginx -V, начиная с —prefix= и до первого —add-module= (все присутствующие в выводе —add_module= нам не нужны). После чего пишем в консоли ./configure и вставляем скопированное из редактора. В нашем случае есть вывод:

--add-dynamic-module=/build/nginx-d8gVax/nginx-1.18.0/debian/modules/http-geoip2

поэтому просто копируем все, кроме этой строки.

В конец строки добавляем —with-http_mp4_module чтобы получилось так:

./configure --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf 
--http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log 
--lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules 
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi 
--http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi 
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit 
--with-http_ssl_module --with-http_stub_status_module --with-http_realip_module 
--with-http_auth_request_module --with-http_v2_module --with-http_dav_module 
--with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module 
--with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module 
--with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module 
--with-mail=dynamic --with-mail_ssl_module --with-http_mp4_module

Нажимаем Enter и ждём окончания процесса.

В процессе конфигурирования возможно будут появляться ошибки. Способы их устранения описаны ниже.

Ошибка:

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

Для Debian/Ubuntu исправляется установкой libpcre++-dev:

apt install libpcre++-dev

Для CentOS/AlmaLinux исправляется установкой pcre-devel:

yum install pcre-devel

Ошибка:

./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.

Для Debian/Ubuntu:

apt install libssl-dev

Для CentOS/AlmaLinux:

yum install openssl-devel 

Ошибка:

./configure: error: the GeoIP module requires the GeoIP library.
You can either do not enable the module or install the library.

Для Debian/Ubuntu:

apt install libgeoip-dev

Для CentOS/AlmaLinux:

yum install GeoIP-devel

Ошибка:

./configure: error: the HTTP XSLT module requires the libxml2/libxslt
libraries. You can either do not enable the module or install the libraries.

Для Debian/Ubuntu:

apt install libxslt1-dev

Для CentOS/AlmaLinux:

yum install libxslt-devel

Ошибка:

./configure: error: the HTTP gzip module requires the zlib library
You can either do not enable the module or install the libraries.

Для Debian/Ubuntu:

apt install zlib1g-dev

Для CentOS/AlmaLinux:

yum install zlib-devel

Ошибка:

./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries.

Для Debian/Ubuntu:

apt install libgd-dev

Для CentOS/AlmaLinux:

yum install gd gd-devel

Каждый раз после apt install или yum install недостающего пакета запускаем заново.

./configure --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf 
--http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log 
--lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules 
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi 
--http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi 
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-compat --with-debug --with-pcre-jit 
--with-http_ssl_module --with-http_stub_status_module --with-http_realip_module 
--with-http_auth_request_module --with-http_v2_module --with-http_dav_module 
--with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module 
--with-http_gzip_static_module --with-http_sub_module --with-http_mp4_module

После успешного окончания конфигурирования увидим на экране что-то вроде:

Configuration summary
  + using threads
  + using system PCRE library
  + using system OpenSSL library
  + using system zlib library

  nginx path prefix: "/usr/share/nginx"
  nginx binary file: "/usr/share/nginx/sbin/nginx"
  nginx modules path: "/usr/lib/nginx/modules"
  nginx configuration prefix: "/etc/nginx"
  nginx configuration file: "/etc/nginx/nginx.conf"
  nginx pid file: "/run/nginx.pid"
  nginx error log file: "/var/log/nginx/error.log"
  nginx http access log file: "/var/log/nginx/access.log"
  nginx http client request body temporary files: "/var/lib/nginx/body"
  nginx http proxy temporary files: "/var/lib/nginx/proxy"
  nginx http fastcgi temporary files: "/var/lib/nginx/fastcgi"
  nginx http uwsgi temporary files: "/var/lib/nginx/uwsgi"
  nginx http scgi temporary files: "/var/lib/nginx/scgi"

Теперь можно собрать бинарник nginx — выполняем 2 команды:

make
make install

По окончании сборки проверяем, что nginx собрался с нужным нам модулем:

/usr/share/nginx/sbin/nginx -V

Результат:

nginx version: nginx/1.18.0
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf 
--http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log 
--lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules 
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi 
--http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi 
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit 
--with-http_ssl_module --with-http_stub_status_module --with-http_realip_module 
--with-http_auth_request_module --with-http_v2_module --with-http_dav_module 
--with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module 
--with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module 
--with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module 
--with-mail=dynamic --with-mail_ssl_module --with-http_mp4_module

Как видим, --with-http_mp4_module в выводе команды присутствует — всё получилось. Осталось заменить текущий бинарник nginx новым, который мы только что собрали.

Останавливаем nginx:

systemctl stop nginx

Переименовываем (на всякий случай) текущий nginx в nginx_back:

mv /usr/sbin/nginx /usr/sbin/nginx_back

Перемещаем на его место новый собраный бинарник:

mv /usr/share/nginx/sbin/nginx /usr/sbin/nginx

Удаляем ненужную больше папку /etc/nginx/sbin:

rm -Rf /usr/share/nginx/sbin

Проверяем ещё раз, что nginx у нас теперь тот, что нужно:

nginx -V

Результат:

nginx version: nginx/1.18.0
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf 
--http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log 
--lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules 
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi 
--http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi 
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit 
--with-http_ssl_module --with-http_stub_status_module --with-http_realip_module 
--with-http_auth_request_module --with-http_v2_module --with-http_dav_module 
--with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module 
--with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module 
--with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module 
--with-mail=dynamic --with-mail_ssl_module --with-http_mp4_module

Запускаем nginx:

systemctl start nginx

Удаляем ненужную больше папку и архив nginx-1.8.1:

cd ../
rm -Rf nginx-1.18.0/
rm -Rf nginx-1.18.0.tar.gz

В некоторых дистрибутивах работает панель управления DirectAdmin,
которая для сборки прописывает путь /usr/local. Nginx при этом не ищет
по этому пути. Возможно этот путь стоит так же добавить для поиска
заголовочных файлов. Тогда и проблем и вопросов будет точно меньше.

23 июля 2011 г. 16:59 пользователь Dmitry Morozovsky <marck@rinet.ru> написал:
> On Sat, 23 Jul 2011, Igor Sysoev wrote:
>
>> > Пишет нет:
>> >
>> > checking for GD library in /usr/local/ … not found
>> > checking for GD library in /usr/pkg/ … not found
>> > checking for GD library in /opt/local/ … not found
>> >
>> > ./configure: error: the HTTP image filter module requires the GD library.
>> > You can either do not enable the module or install the libraries.
>
> может быть, чтоб меньше было вопросов, писать что-то вроде
>
> s/library /library headers /
> s/the libraries/the libraries with headers (ususally both lib and lib-devel
> packages)/
>
> ?
>
> —
> Sincerely,
> D.Marck                                     [DM5020, MCK-RIPE, DM3-RIPN]
> [ FreeBSD committer:                                 marck@FreeBSD.org ]
> ————————————————————————
> *** Dmitry Morozovsky — D.Marck — Wild Woozle — marck@rinet.ru ***
> ————————————————————————
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>


Best regards,
Anton Kiryushkin,
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Подключение дополнительных модулей к NGINX не самая тривиальная вещь для веб-разработчиков. Рассмотрим эту задачу на примере сборки NGINX с модулем HTTP Redis (ngx_http_redis).

Раньше, для подключения модулей к NGINX, нужно было полностью компилировать и веб-сервер и желаемые модули, но начиная с версии 1.9.11 можно этого не делать, а обойтись командой make modules, но для этого необходимо правильно сконфигурировать всю сборку NGINX.

Итак, сначала нужно узнать какая версия NGINX установлена. Если меньше 1.9.11, то читаем Установка последней версии NGINX. 

nginx -v

##
nginx version: nginx/1.13.5

Скачиваем и распаковываем в домашнюю директорию ту же самую версию NGINX (в нашем случае 1.13.5):

wget https://nginx.ru/download/nginx-1.13.5.tar.gz
tar -xzvf nginx-1.13.5.tar.gz

Скачиваем и распаковываем модуль HTTP Redis:

wget https://people.freebsd.org/~osa/ngx_http_redis-0.3.8.tar.gz
tar -xzvf ngx_http_redis-0.3.8.tar.gz

Итого, у нас должны быть:

1. Установленный и работающий NGINX >= 1.9.11

2. Скаченный дистрибутив NGINX той же версии, что в пункте 1

3. Скаченный дистрибутив модуля HTTP Redis

Теперь мы можем скомпилировать модуль и подключить его в файле nginx.conf командой load_module my_module.so.

Нужно узнать текущую конфигурацию билда NGINX, смотрим его командой:

nginx -V

Заходим в директорию, куда распаковался скаченный NGINX:

cd nginx-1.13.5/

Готовимся к билду. Он проходит в два этапа: «configure» и «make».

Configure

Нужно после команды ./configure поставить то, что показано у вас в команде nginx -V. В моём случае (Ubuntu 16, nginx 1.13.5) получается:

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' --add-dynamic-module=../ngx_http_redis-0.3.8

В конце добавлен путь к динамическому модулю, который нужно скомпилировать (мы находимся в директории nginx ~/nginx-1.13.5), не забудьте его добавить:

--add-dynamic-module=../ngx_http_redis-0.3.8

Нажимаем Enter. Если вам повезло и на выходе нет ошибок, отлично.

Make

Дальше создаём модуль командой:

make modules

Если опять нет ошибок, то вы получите файл:

nginx-1.13.5/objs/ngx_http_redis_module.so

Подключаем его к NGINX, для этого в /etc/nginx/nginx.conf добавляем в самый верх строку с load_module, указываем полный путь до файла:

sudo nano /etc/nginx/nginx.conf
 
## Load our module:
load_module /home/vagrant/nginx-1.13.5/objs/ngx_http_redis_module.so;

Перезагружаем:

sudo nginx -s reload

Если нет сообщения об ошибке, значит модуль подключился! Можно переписать ngx_http_redis_module.so в более подходящее место и не забыть изменить путь к нему в nginx.conf.

Обновление NGINX

Модуль привязан к конкретной версии NGINX, если мы её обновим, то, скорее всего, он перестанет работать. Поэтому нужно пакет NGINX поставить на холд — заблокировать от обновления:

## sudo apt-mark hold <package>
sudo apt-mark hold nginx

## Remove HOLD
# sudo apt-mark unhold <package-name>

## Check HOLD
#apt-mark showhold

Ошибки и проблемы

Проблемы «configure»

1. Не проходит конфигурация билда, команда ./configure возвращает ошибку (после этого нельзя запустить make modules)

Ошибки такого вида:

./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.

В данном примере, если мы изменим конфигурацию (чтобы проходил ./configure) и поставим —without-http_gzip_module, скорее всего, на этапе подключения модуль не подойдёт к nginx (см. ниже)

В процессе могут вылетать разные требования к библиотекам, которые нужны для билда nginx (или не вылетать). Эти пакеты может понадобиться установить самостоятельно (а могут уже стоять):

1. «./configure: error: C compiler cc is not found»

sudo apt-get install build-essential

2. PCRE

sudo apt-get install libpcre3
sudo apt-get install libpcre3-dev

3. OpenSSL

sudo apt-get install libssl-dev

4. HTTP XSLT module requires the libxml2/libxslt

sudo apt-get install libxml2
sudo apt-get install libxml2-dev
sudo apt-get install libxslt-dev

5. «…the HTTP image filter module requires the GD library»

sudo apt-get install libgd-dev

6. GeoIP

sudo apt-get install libgeoip-dev

7. PAM authentication module

sudo apt-get install libpam-dev

Проблемы подключения

Когда удалось скомпилировать модуль, но не работает подключение в NGINX:

— Модуль module-name.so компилируется, но при перезагрузке nginx пишет, что не та версия — перепроверить и скачать соответствующую версию.

— «is not binary compatible» ошибка примерно такая:

nginx: [emerg] module "/usr/share/nginx/modules/ngx_http_redis_module.so" is not binary compatible in /etc/nginx/nginx.conf:1

Это значит неправильно сконфигурирован билд модуля. Разбираемся с опциями ./configure: неправильно скопировали, не все зависимости установлены и так далее.

Понравилась статья? Поделить с друзьями:
  • Configuration error for all dimms on subsystem system memory
  • Configuration error dmi assertion
  • Configure error the http gzip module requires the zlib library
  • Configuration error daf 105
  • Configure error the geoip2 module requires the maxminddb library