Issue
When configure nginx 1.19.0, run the commands.
./configure --prefix=/opt/nginx-1.19.0
But the following error occurs.
checking for PCRE library ... not found
checking for PCRE library in /usr/local/ ... not found
checking for PCRE library in /usr/include/pcre/ ... not found
checking for PCRE library in /usr/pkg/ ... not found
checking for PCRE library in /opt/local/ ... not found
./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.
Solution
You need to install pcre.
1. Mac OS
Download pcre
in the official website http://www.pcre.org/, such as pcre-8.44.zip
, and run:
$ unzip pcre-8.44.zip
$ cd pcre-8.44
$ pwd
/Users/cpm/Downloads/packages/pcre-8.44
Copy your unzip path of pcre-8.44.zip
, configure nginx again.
./configure --prefix=/opt/nginx-1.19.0 --with-pcre=/Users/cpm/Downloads/packages/pcre-8.44
2. Ubuntu/Debian
- Use the method from step 1 above.
- On the https://pkgs.org/search/?q=libpcre webpage, find the
libpcre
andlibpcre-dev
packages that match your operating system, download and install. - Use the
apt-get
command.
sudo apt-get install libpcre3-dev
3. RHEL/CentOS
- Use the method from step 1 above.
- On the https://pkgs.org/search/?q=pcre webpage, find the
pcre
andpcre-devel
packages that match your operating system, download and install. - Use the
yum
command.
sudo yum install pcre-devel
При установке 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
While building nginx from source on CentOS/RHEL machine, encountered a very strange error as shown below:
./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.
I was wondering what this heck PCRE Library? I had never heard of it! After Googling, found that PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5. HTTP rewrite module of Nginx uses this PCRE library.
Solution: Install PCRE Library
You can install PCRE library using YUM as shown below:
yum install pcre
Once installed, again tried to compile Nginx and still faced the same error! Now found out the “pcre-devel” also need to be installed. You can install pcre-devel package using the below command:
yum install pcre-devel
Now compiling Nginx, went smooth, without any error 🙂
Ramya Santhosh
is a Web Designer and content creator. A freelance writer on latest trends in technology, gadget reviews, How to’s and many more.
The PCRE library is a set of functions that implement regular expression pattern matching . This is being used in many high profile open source projects like Apache, Nginx and PHP. While i was trying to compile and install nginx on my staging machine, following error was thrown
1 |
./configure: error: the HTTP rewrite module requires the PCRE library. |
Configure script complains “pcre” library is missing on the server, which is required by “nginx” rewrite module. Either we need to disable the rewrite module in nginx or we have to install pcre library on the machine. As you know, rewrite functionality is very much critical for any webserver to manipulate the URLs.
In this article we will see how to install pcre and pcre-devel on Ubuntu and Centos
On Centos machine, I can install “pcre” and “pcre-devel” packages using yum .
1 |
yum install pcre pcre–devel |
How to install pcre and pcre-devel on Ubuntu ?
On ubuntu machines, the apt-get package names for “pcre” and “pcre development packages are “libpcre3” and “libpcre3-dev” . Run the following commands to install
1 |
apt–get install libpcre3 apt–get install libpcre3–dev |
On my machine, “libpcre3” was already installed and i had to install only “libpcre3-dev”
1 |
root@7b7d9678efd3:/nginx–1.13.3# apt-get install libpcre3 |
1 |
root@7b7d9678efd3:/nginx–1.13.3# apt-get install libpcre3-dev |
As always, feel free to drop us a note if you have any queries or feedbacks using our comment form below. Always happy to help you ???? Manuels d’utilisation
При установке Nginx штатными средствами ОС, нет возможности сконфигурировать его установку, чтобы добавить или убрать модули, и Nginx устанавливается “как есть”. Что же делать, если нам необходимо добавить модуль? Нужно пересобрать Nginx вручную.
Об этом и пойдет речь.
Предположим, что нам необходимо добавить в nginx модуль ngx_http_geo_module
. Вывод команды nginx -V
покажет нам, что Nginx собран без него.
nginx version: nginx/1.6.3
built by gcc 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --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-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_spdy_module --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'
Вывод команды nginx -V
лучше всего сохранить, поскольку данная информация нам потребуется в дальнейшем.
Шаг 1. Загружаем Nginx
Загружаем ту же версию Nginx, что и установлена.
wget http://nginx.org/download/nginx-1.6.3.tar.gz
Распакуем архив и перейдём в папку nginx-1.6.3
:
tar zxvf nginx-1.6.3.tar.gz
cd nginx-1.6.3
Для сборки потребуются дополнительные пакеты, если они еще не установлены в системе, то производим их установку.
yum install gcc gcc-c++ kernel-devel
yum groupinstall "Development Tools"
Шаг 2. Сборка Nginx с необходимыми модулями
Приступаем к установке Nginx с добавлением необходимого модуля ngx_http_geo_module
Из ранее сохраненного вывод команды nginx -V
копируем текст начиная с --prefix=
Должно получиться так:
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --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-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_spdy_module --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --with-http_geoip_module
-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_spdy_module --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --with-http_geoip_module
В процессе установки возможно будут ошибки, исправляем их.
Исправление ошибок в процессе конфигурации
Ошибка
./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.
Исправляем
yum install openssl-devel
Ошибка
./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.
Исправляем
yum install pcre-devel
Ошибка
./configure: error: the GeoIP module requires the GeoIP library.
You can either do not enable the module or install the library.
Исправляем
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.
Исправляем
yum install libxslt-devel
При успешной конфигурации вывод будет приблизительно следующий:
Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ md5: using OpenSSL library
+ sha1: using OpenSSL library
+ using system zlib library
nginx path prefix: "/etc/nginx"
nginx binary file: "/usr/sbin/nginx"
nginx configuration prefix: "/etc/nginx"
nginx configuration file: "/etc/nginx/nginx.conf"
nginx pid file: "/var/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/cache/nginx/client_temp"
nginx http proxy temporary files: "/var/cache/nginx/proxy_temp"
nginx http fastcgi temporary files: "/var/cache/nginx/fastcgi_temp"
nginx http uwsgi temporary files: "/var/cache/nginx/uwsgi_temp"
nginx http scgi temporary files: "/var/cache/nginx/scgi_temp"
Теперь собираем Nginx
make
make install
После сборки проверяем установленные модули командой nginx -V
nginx version: nginx/1.6.3
built by gcc 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --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-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_spdy_module --with-http_geoip_module --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'
Как видим, --with-http_geoip_module
присутствует.
Перезапускаем Nginx
systemctl restart nginx
Модуль установлен.
25.03.2021 16:33 |
Другое
OS: Ubuntu 18.04
Фактически, установить nginx можно с помощью двух строк:
sudo apt update
sudo apt install nginx
что, собственно, я когда-то и сделал на своём десктопе. А вот на лэптопе решил поэкспериментировать.
Сборка и установка
Для начала обновим списки пакетов и репозиториев:
sudo apt-get update
Следующий шаг — загрузка исходников nginx. Для этого заходим на сайт nginx в секцию download, поскольку я буду устанавливать сервер на ноутбук (читайте, локальную машину), я скачаю Mainline version, в других случаях предпочёл бы Stable). Кликаем со ссылке правой клавишей мыши, копируем линк, скачиваем в любую директорию (в Вашем случае версия может отличаться):
wget http://nginx.org/download/nginx-1.19.8.tar.gz
и распаковываем (в эту же директорию):
tar -zxvf nginx-1.19.8.tar.gz
После мы должны увидеть директорию с исходниками:
$ ll
drwxr-xr-x 8 serhii75 serhii75 4096 бер 9 17:27 nginx-1.19.8/
-rw-rw-r-- 1 serhii75 serhii75 1060155 бер 9 17:32 nginx-1.19.8.tar.gz
Команды будем запускать от имени root, поэтому выполним:
sudo su
Переходим в nginx-1.19.8 (опять-таки, у Вас может быть другая версия) и попробуем сконфигурировать исходники для сборки:
# cd nginx-1.19.8/
nginx-1.19.8# ./configure
Если после выполнения этой команды получили ошибку об отсутствии компилятора C:
./configure: error: C compiler cc is not found
…запустите команду:
# sudo apt-get install build-essential
Хотя c проблемой выше в этот раз не сталкивался, но получил другую ошибку:
./configure: error: the HTTP rewrite module requires the PCRE library.
Т.е. отсутствует библиотека для регулярных выражений (Perl Compatible Regular Expressions). На самом деле, запуская ./configure
, мы увидели чего не хватает. Что ж, установим необходимую библиотеку:
sudo apt-get install libpcre3 libpcre3-dev
а также библиотеки для компрессии и ssl:
sudo ap-get zlib1g zlib1g-dev libssl-dev
Снова запускаем ./configure
и на этот раз никаких ошибок быть не должно. Посмотреть все возможные флаги конфигурации можно запустив:
# ./configure --help
что касается подробной информации, её найдёте здесь. Мы добавим несколько флагов:
- —sbin-path=путь — задаёт имя исполняемого файла nginx, который используется для запуска/остановки сервиса nginx
- —conf-path=путь — задаёт имя конфигурационного файла nginx.conf
- —error-log-path=путь — задаёт имя основного файла ошибок, предупреждений и диагностики
- —http-log-path=путь — задаёт имя основного файла регистрации запросов HTTP-сервера
- —with-pcre — разрешает использование библиотеки PCRE
- —pid-path=путь — задаёт имя файла nginx.pid, в котором будет храниться номер главного процесса
- —with-http_ssl_module — разрешает сборку модуля для работы HTTP-сервера по протоколу HTTPS
В конечном итоге команда будет выглядеть так:
# ./configure --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-pcre --pid-path=/var/run/nginx.pid --with-http_ssl_module
Запускаем, и после звершения можем компилировать:
# make
После того, как компиляция будет завершена, инсталлируем:
# make install
Проверяем, прошла ли успешно установка (после выполнения команды увидим примерно следующее):
# nginx -V
nginx version: nginx/1.19.8
built by gcc 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
built with OpenSSL 1.1.1 11 Sep 2018
TLS SNI support enabled
configure arguments: --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-pcre --pid-path=/var/run/nginx.pid --with-http_ssl_module
Запускаем nginx:
# nginx
Проверяем, запущен ли процесс:
# ps aux | grep nginx
root 8186 0.0 0.0 32960 808 ? Ss 21:45 0:00 nginx: master process nginx
nobody 8187 0.0 0.0 37780 3572 ? S 21:45 0:00 nginx: worker process
root 8198 0.0 0.0 15936 1016 pts/0 S+ 21:45 0:00 grep --color=auto nginx
И, если проверим в браузере, набрав localhost, то увидим «Welcom to nginx!».
Создаём системный сервис
Сервис позволит не только запускать и останавливать nginx, но так же стартовать nginx при загрузке/перезагрузке системы. Идём сюда, и переходим по ссылке NGINX Systemd service file в секции Systemd. Как и сказано в инструкции, создаём файл:
nano /lib/systemd/system/nginx.service
И копируем в него содержимое из ссылки выше.
Важно: обратите внимание, что мы изменили строку с PIDFile
, прописав путь, который указывали при конфигурировании. В итоге файл будет выглядеть так:
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Запускаем nginx:
systemctl start nginx
И проверяем есть ли процесс:
# ps aux | grep nginx
root 9564 0.0 0.0 32960 804 ? Ss 22:07 0:00 nginx: master process /usr/sbin/nginx
nobody 9565 0.0 0.0 37780 3556 ? S 22:07 0:00 nginx: worker process
root 9568 0.0 0.0 15936 992 pts/0 S+ 22:07 0:00 grep --color=auto nginx
Судя по ответу всё в порядке. Поскольку теперь у нас есть сервис, мы можем посмотреть статус nginx используя команду:
# systemctl status nginx
что даст нам больше информации:
# systemctl status nginx
● nginx.service - The NGINX HTTP and reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2021-03-25 22:07:33 EET; 11min ago
Process: 9563 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 9562 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Main PID: 9564 (nginx)
Tasks: 2 (limit: 4915)
CGroup: /system.slice/nginx.service
├─9564 nginx: master process /usr/sbin/nginx
└─9565 nginx: worker process
бер 25 22:07:33 serhii75-laptop systemd[1]: Starting The NGINX HTTP and reverse proxy server...
бер 25 22:07:33 serhii75-laptop nginx[9562]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
бер 25 22:07:33 serhii75-laptop nginx[9562]: nginx: configuration file /etc/nginx/nginx.conf test is successful
бер 25 22:07:33 serhii75-laptop systemd[1]: Started The NGINX HTTP and reverse proxy server.
На данный момент, после перезагрузки машины, nginx не будет запущен, что, очевидно, плохо для веб-сервера. Поэтому сделаем так, чтобы nginx «заводился» после ребута.
Остановим сервис:
# systemctl stop nginx
И выполним:
systemctl enable nginx
После чего должны увидеть запись о том, что была создана символическая ссылка:
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx.service.
Перезагружаем лэптоп, открываем консоль и проверяем запущен ли nginx:
$ sudo systemctl status nginx
[sudo] password for serhii75:
● nginx.service - The NGINX HTTP and reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-03-25 22:37:50 EET; 35s ago
Process: 2006 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 1991 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Main PID: 2010 (nginx)
Tasks: 2 (limit: 4915)
CGroup: /system.slice/nginx.service
├─2010 nginx: master process /usr/sbin/nginx
└─2011 nginx: worker process
бер 25 22:37:50 serhii75-laptop systemd[1]: Starting The NGINX HTTP and reverse proxy server...
бер 25 22:37:50 serhii75-laptop nginx[1991]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
бер 25 22:37:50 serhii75-laptop nginx[1991]: nginx: configuration file /etc/nginx/nginx.conf test is successful
бер 25 22:37:50 serhii75-laptop systemd[1]: Started The NGINX HTTP and reverse proxy server.
Примечание: поскольку мы теперь не под root-ом, понадобится добавлять sudo
перед командой.
Работает! Что и требовалось.
На этом на сегодня всё. Успехов!
nginx: �������!
30.09.2011
������������� �����������, ��������� � ������� nginx-1.0.7
� ��������� ������� ./configure
:
tar zxf nginx-1.0.7.tar.gz cd nginx-1.0.7 ./configure
��������, ��� ���������������� ��������� ������ ��-�� ����, ��� �� �������
�� ��� ���� ����������, ��������, ���������� PCRE:
./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.
� ���� ������ ����� ��� ���������� �� ������������� ������
ngx_http_rewrite_module � ������� ���������
--without-http_rewrite_module
,
��� ���������� � ������� ���������� PCRE, ��� �� ������� ���������� PCRE
������ � nginx �� �������� �������, ������ configure
���� � ��� � ������� ���������
--with-pcre=<����>
.
��������� ������� ��������� ������ � �������
��������� nginx.
���� ���������� ��������� ������������ ������, �� ���������� �����������
������� configure
����� �������:
make clean
����� ��������� ���������������� �������� nginx:
make
� ������������� ���:
make install
��������� ������ ���� ��������� � ������� ������������ root.
��� ���������������� ������ ��� ���������� nginx ����� ���������� � �������
/usr/local/nginx/
.
����� �������� ��������� ��������� nginx � ������� ������������ root:
/usr/local/nginx/sbin/nginx
� �������
ps ax -o pid,ppid,user,%cpu,vsz,wchan,command|egrep '(nginx|PID)'
�� FreeBSD 4.x ������� �������� ���������:
PID PPID USER %CPU VSZ WCHAN COMMAND 11116 1 root 0.0 1268 pause nginx: master process /usr/local/nginx/sbi 11117 11116 nobody 0.0 1484 kqread nginx: worker process (nginx) 11118 11116 nobody 0.0 1484 kqread nginx: worker process (nginx) 11119 11116 nobody 0.0 1484 kqread nginx: worker process (nginx)
nginx ����� ��������� �������.
(C) ����� ������
http://sysoev.ru
PCRE Library is a library that is required to use HTTP rewrite when we do a compilation of nginx. The PCRE package contains Perl Compatible Regular Expression libraries useful for implementing regular expression pattern matching.
If PCRE is not installed on the server, it will result in the following error message during the Nginx compliation:
checking for PCRE library ... not found checking for PCRE library in /usr/local/ ... not found checking for PCRE library in /usr/include/pcre/ ... not found ./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. |
How to Install the PCRE library so we can install Nginx Web Server with the HTTP rewrite module ? login into your server via SSH as user ‘root’
1) First, goto a temporary directory
2) Download PCRE:
# wget http://downloads.sourceforge.net/pcre/pcre-8.10.tar.bz2 |
3) Unpack and change to the pcre directory
# tar -jxf pcre-8.10.tar.bz2 # cd pcre-8.10 |
4) Confiure PCRE:
5) Create the installation files and install PCRE
Once done, you should be able to install Nginx with the HTTP rewrite module.