Nginx basis: 4: installation and configuration module tripartite

Here Insert Picture Description
Previous article describes the method to confirm tripartite module is installed, the article goes on to subs_filter example describes how to compile source code and settings.

In subs_filter module, for example, according to the following steps:

Step 1: confirm beforehand

This demand is generally appear nginx has been installed, or download the source code and nginx source modules can be directly translated, but a more general set of circumstances need to make sure the installed nginx version and compile time, you first need to execute the following command obtain this information.

Execute the command: nginx -V

[root@liumiaocn nginx]# nginx -V
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-stream_ssl_preread_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --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_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-http_auth_request_module --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'
[root@liumiaocn nginx]# 

In this way we understand the current nginx version 1.16.1, but also to get the configuration settings are used when compiling content.
While setting subs_filter, to confirm the current state to be wrong, to confirm the installation and the setting operation is normal.

[root@liumiaocn nginx]# nginx -s reload
nginx: [emerg] unknown directive "subs_filter" in /etc/nginx/nginx.conf:53
[root@liumiaocn nginx]# 

Detailed methods can be found in: https://liumiaocn.blog.csdn.net/article/details/104104790

Step 2: Download the source code

Download nginx source

Nginx 1.16.1 download the source code needed here

Download command: wget http://nginx.org/download/nginx-1.16.1.tar.gz

[root@liumiaocn subs_filter]# wget http://nginx.org/download/nginx-1.16.1.tar.gz 
...省略
[root@liumiaocn subs_filter]# ls nginx-1.16.1.tar.gz 
nginx-1.16.1.tar.gz
[root@liumiaocn subs_filter]# 

Decompression nginx source

[root@liumiaocn subs_filter]# tar xf nginx-1.16.1.tar.gz 
[root@liumiaocn subs_filter]# ls
nginx-1.16.1  nginx-1.16.1.tar.gz
[root@liumiaocn subs_filter]# cd nginx-1.16.1
[root@liumiaocn nginx-1.16.1]# pwd
/root/subs_filter/nginx-1.16.1
[root@liumiaocn nginx-1.16.1]#

Source obtain subs_filter

Use the following command to get subs_filter source

git clone http://github.com/yaoweibin/ngx_http_substitutions_filter_module.git

[root@liumiaocn nginx-1.16.1]# pwd
/root/subs_filter/nginx-1.16.1
[root@liumiaocn nginx-1.16.1]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@liumiaocn nginx-1.16.1]# git clone http://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
Cloning into 'ngx_http_substitutions_filter_module'...
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 496 (delta 0), reused 0 (delta 0), pack-reused 495
Receiving objects: 100% (496/496), 275.92 KiB | 0 bytes/s, done.
Resolving deltas: 100% (260/260), done.
[root@liumiaocn nginx-1.16.1]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  ngx_http_substitutions_filter_module  README  src
[root@liumiaocn nginx-1.16.1]# 

Step 3: recompile

Add the following compilation setting options in step 1 to obtain

--add-module=/root/subs_filter/nginx-1.16.1/ngx_http_substitutions_filter_module

Note: The directory path needs to be modified to generate consistent git clone command

Then set ./configure

[root@liumiaocn nginx-1.16.1]# ./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-stream_ssl_preread_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --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_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-http_auth_request_module --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E' --add-module=/root/subs_filter/nginx-1.16.1/ngx_http_substitutions_filter_module
checking for OS
 + Linux 5.4.2-1.el7.elrepo.x86_64 x86_64
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
checking for gcc -pipe switch ... found
checking for --with-ld-opt="-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E" ... found
checking for -Wl,-E switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
...省略
checking for Google perftools ... found
creating objs/Makefile

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

  nginx path prefix: "/usr/share/nginx"
  nginx binary file: "/usr/sbin/nginx"
  nginx modules path: "/usr/lib64/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/tmp/client_body"
  nginx http proxy temporary files: "/var/lib/nginx/tmp/proxy"
  nginx http fastcgi temporary files: "/var/lib/nginx/tmp/fastcgi"
  nginx http uwsgi temporary files: "/var/lib/nginx/tmp/uwsgi"
  nginx http scgi temporary files: "/var/lib/nginx/tmp/scgi"

./configure: warning: the "--with-ipv6" option is deprecated
[root@liumiaocn nginx-1.16.1]# 

Note: with-ipv6 nginx option will automatically determine after nginx 1.11.5 version, this article describes methods to customize the installation and set, not repeat them here.

Common Mistakes and corresponding method

General lack of mounting assembly are collected, in order to avoid the configure command mistakes, the proposed first package uses the following common errors yum content required for installation before execution

  • Error 1
checking for --with-ld-opt="-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E" ... not found
./configure: error: the invalid value in --with-ld-opt="-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E"

Corresponding method: yum -y install redhat-rpm-config.noarch

  • Error 2
./configure: error: the HTTP rewrite module requires the PCRE library.

Corresponding method: yum -y install pcre-devel

  • Error 3
./configure: error: SSL modules require the OpenSSL library.

Corresponding method: yum -y install openssl openssl-devel

  • Error 4
./configure: error: the HTTP XSLT module requires the libxml2/libxslt

Corresponding method: yum -y install libxml2 libxml2-dev libxslt-devel

  • Error 5
./configure: error: the HTTP image filter module requires the GD library.

Corresponding method: yum -y install gd-devel

  • Error 6
./configure: error: perl module ExtUtils::Embed is required

Corresponding method: yum -y install perl-devel perl-ExtUtils-Embed

  • Error 7
./configure: error: the Google perftools module requires the Google perftools
library. You can either do not enable the module or install the library

Corresponding method: yum install gperftools -y

Step 4: Compile

Use the make command to compile

[root@liumiaocn nginx-1.16.1]# make
make -f objs/Makefile
make[1]: Entering directory `/root/subs_filter/nginx-1.16.1'
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -I src/core -I src/event -I src/event/modules -I src/os/unix -I src/http/modules/perl -I /usr/include/libxml2 -I objs \
	-o objs/src/core/nginx.o \
	src/core/nginx.c
...省略
objs/ngx_stream_module_modules.o \
-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E \
-shared
sed -e "s|%%PREFIX%%|/usr/share/nginx|" \
	-e "s|%%PID_PATH%%|/run/nginx.pid|" \
	-e "s|%%CONF_PATH%%|/etc/nginx/nginx.conf|" \
	-e "s|%%ERROR_LOG_PATH%%|/var/log/nginx/error.log|" \
	< man/nginx.8 > objs/nginx.8
make[1]: Leaving directory `/root/subs_filter/nginx-1.16.1'
[root@liumiaocn nginx-1.16.1]#

Step 5: Installation

Use make install to complete the installation

[root@liumiaocn nginx-1.16.1]# which nginx
/usr/sbin/nginx
[root@liumiaocn nginx-1.16.1]# ls -l /usr/sbin/nginx
-rwxr-xr-x 1 root root 1210984 Oct  3 01:15 /usr/sbin/nginx
[root@liumiaocn nginx-1.16.1]# 
[root@liumiaocn nginx-1.16.1]# make install
make -f objs/Makefile install
make[1]: Entering directory `/root/subs_filter/nginx-1.16.1'
cd objs/src/http/modules/perl && make install
make[2]: Entering directory `/root/subs_filter/nginx-1.16.1/objs/src/http/modules/perl'
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /usr/local/lib64/perl5/auto/nginx/nginx.so
Installing /usr/local/lib64/perl5/auto/nginx/nginx.bs
Installing /usr/local/lib64/perl5/nginx.pm
Installing /usr/local/share/man/man3/nginx.3pm
Appending installation info to /usr/lib64/perl5/perllocal.pod
make[2]: Leaving directory `/root/subs_filter/nginx-1.16.1/objs/src/http/modules/perl'
test -d '/usr/share/nginx' || mkdir -p '/usr/share/nginx'
test -d '/usr/sbin' \
	|| mkdir -p '/usr/sbin'
test ! -f '/usr/sbin/nginx' \
	|| mv '/usr/sbin/nginx' \
		'/usr/sbin/nginx.old'
cp objs/nginx '/usr/sbin/nginx'
test -d '/etc/nginx' \
	|| mkdir -p '/etc/nginx'
cp conf/koi-win '/etc/nginx'
cp conf/koi-utf '/etc/nginx'
cp conf/win-utf '/etc/nginx'
test -f '/etc/nginx/mime.types' \
	|| cp conf/mime.types '/etc/nginx'
cp conf/mime.types '/etc/nginx/mime.types.default'
test -f '/etc/nginx/fastcgi_params' \
	|| cp conf/fastcgi_params '/etc/nginx'
cp conf/fastcgi_params \
	'/etc/nginx/fastcgi_params.default'
test -f '/etc/nginx/fastcgi.conf' \
	|| cp conf/fastcgi.conf '/etc/nginx'
cp conf/fastcgi.conf '/etc/nginx/fastcgi.conf.default'
test -f '/etc/nginx/uwsgi_params' \
	|| cp conf/uwsgi_params '/etc/nginx'
cp conf/uwsgi_params \
	'/etc/nginx/uwsgi_params.default'
test -f '/etc/nginx/scgi_params' \
	|| cp conf/scgi_params '/etc/nginx'
cp conf/scgi_params \
	'/etc/nginx/scgi_params.default'
test -f '/etc/nginx/nginx.conf' \
	|| cp conf/nginx.conf '/etc/nginx/nginx.conf'
cp conf/nginx.conf '/etc/nginx/nginx.conf.default'
test -d '/run' \
	|| mkdir -p '/run'
test -d '/var/log/nginx' \
	|| mkdir -p '/var/log/nginx'
test -d '/usr/share/nginx/html' \
	|| cp -R html '/usr/share/nginx'
test -d '/var/log/nginx' \
	|| mkdir -p '/var/log/nginx'
test -d '/usr/lib64/nginx/modules' \
	|| mkdir -p '/usr/lib64/nginx/modules'
test ! -f '/usr/lib64/nginx/modules/ngx_http_xslt_filter_module.so' \
	|| mv '/usr/lib64/nginx/modules/ngx_http_xslt_filter_module.so' \
		'/usr/lib64/nginx/modules/ngx_http_xslt_filter_module.so.old'
cp objs/ngx_http_xslt_filter_module.so '/usr/lib64/nginx/modules/ngx_http_xslt_filter_module.so'
test ! -f '/usr/lib64/nginx/modules/ngx_http_image_filter_module.so' \
	|| mv '/usr/lib64/nginx/modules/ngx_http_image_filter_module.so' \
		'/usr/lib64/nginx/modules/ngx_http_image_filter_module.so.old'
cp objs/ngx_http_image_filter_module.so '/usr/lib64/nginx/modules/ngx_http_image_filter_module.so'
test ! -f '/usr/lib64/nginx/modules/ngx_http_perl_module.so' \
	|| mv '/usr/lib64/nginx/modules/ngx_http_perl_module.so' \
		'/usr/lib64/nginx/modules/ngx_http_perl_module.so.old'
cp objs/ngx_http_perl_module.so '/usr/lib64/nginx/modules/ngx_http_perl_module.so'
test ! -f '/usr/lib64/nginx/modules/ngx_mail_module.so' \
	|| mv '/usr/lib64/nginx/modules/ngx_mail_module.so' \
		'/usr/lib64/nginx/modules/ngx_mail_module.so.old'
cp objs/ngx_mail_module.so '/usr/lib64/nginx/modules/ngx_mail_module.so'
test ! -f '/usr/lib64/nginx/modules/ngx_stream_module.so' \
	|| mv '/usr/lib64/nginx/modules/ngx_stream_module.so' \
		'/usr/lib64/nginx/modules/ngx_stream_module.so.old'
cp objs/ngx_stream_module.so '/usr/lib64/nginx/modules/ngx_stream_module.so'
make[1]: Leaving directory `/root/subs_filter/nginx-1.16.1'
[root@liumiaocn nginx-1.16.1]# which nginx
/usr/sbin/nginx
[root@liumiaocn nginx-1.16.1]# ls -l /usr/sbin/nginx
-rwxr-xr-x 1 root root 8348816 Jan 28 22:27 /usr/sbin/nginx
[root@liumiaocn nginx-1.16.1]#

Step 6: Results of confirmation

Restart nginx service, and reload service

[root@liumiaocn nginx-1.16.1]# systemctl start nginx
[root@liumiaocn nginx-1.16.1]# 
[root@liumiaocn nginx-1.16.1]# nginx -s reload
[root@liumiaocn nginx-1.16.1]#

You can see the unknown directive "subs_filter" (does not recognize subs_filter instructions) error message no longer appears, indicating that at this time the three parties modules have been worked.

Released 1028 original articles · won praise 1290 · Views 3.98 million +

Guess you like

Origin blog.csdn.net/liumiaocn/article/details/104104888