Назад | Перейти на главную страницу

Использование PCRE 8.20 с Nginx 1.0.11 и Passenger

Я загрузил и распаковал исходный код nginx в ~ / nginx-1.0.11, а затем загрузил PCRE 8.20 напрямую, поскольку последняя версия установщика Passenger не может загрузить его автоматически. Я выполнил типичный ./configure, make, sudo make install для PCRE, который по умолчанию поместил его в / usr / local / lib. Все идет нормально. Использование пассажирского-install-nginx-module и указание исходного каталога как /home/username/nginx-1.0.11 работало нормально.

Когда я проверил синтаксис с помощью / opt / nginx / sbin / nginx -t, мне сообщили, что libpcre.so.0 не может быть найден. Я запустил ldd против nginx и получил следующее:

linux-vdso.so.1 =>  (0x00007fff1dd7b000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007fbfcde57000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x00007fbfcdc1e000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fbfcd909000)
libm.so.6 => /lib/libm.so.6 (0x00007fbfcd686000)
libpcre.so.0 => not found
    (truncated after this line)

Поскольку nginx смог найти файлы в / usr / lib, я перекомпилировал PCRE с помощью ./configure --prefix = / usr, и теперь все работает отлично. Мой вопрос в том, есть ли более разумный способ сделать это. Могу ли я оставить PCRE установленным в каталоге по умолчанию / usr / local и каким-то образом указать системе или nginx искать там каталоги lib? Библиотеки до сих пор остаются для меня загадкой.

Я могу придумать несколько вариантов ...

/etc/ld.so.conf

Можете добавить /usr/local/lib в глобальный список путей к библиотекам для поиска. Добавьте его в /etc/ld.so.conf файл, затем запустите ldconfig для обновления кеша. Лично мне этот вариант не очень нравится из-за его глобального влияния.

LD_LIBRARY_PATH

Добавляя /usr/local/lib к LD_LIBRARY_PATH переменная окружения, система должна найти ее при запуске nginx. Вероятно, вам не следует устанавливать это постоянно в среде оболочки, поскольку это будет иметь такое же глобальное влияние, как и изменение /etc/ld.so.conf. Вместо этого вы можете протестировать это специальным образом, добавив к команде nginx префикс:

LD_LIBRARY_PATH=/usr/local/lib /opt/nginx/sbin/nginx -t

Вы также можете установить переменную в сценарии инициализации для nginx.

варианты для configure

В скрипте настройки для nginx есть флаг, который позволит вам передать дополнительные параметры в ld. Вы можете попробовать запустить скрипт конфигурации nginx с --with-ld-opt='-L/usr/local/lib'. Я не уверен, изменит ли это путь поиска библиотеки только во время компиляции или это также повлияет на время выполнения. Могут быть и другие варианты компоновщика, которые тоже подойдут. Прошло немного времени с тех пор, как мне пришлось возиться с этим материалом.

В сценарии настройки также есть --with-pcre вариант для передачи пути к источникам PCRE, но, похоже, он используется для статической привязки библиотеки к nginx. Возможно, это тоже не лучшая идея.

Я предлагаю сделать тестовую сборку nginx, используя --with-ld-opt='-L/usr/local/lib' (возможно, в отдельном каталоге сборки, если вы хотите сохранить свой оригинал). Затем вы можете проверить скомпилированный двоичный файл в каталоге сборки с помощью ldd как вы это делали раньше, чтобы увидеть, имеет ли это значение.