Nginx基础:4:三方模块的安装与设定

在这里插入图片描述
前面一篇文章介绍了三方模块的是否安装的确认方法,这篇文章继续以subs_filter为例进行介绍如何进行源码编译和设定。

以subs_filter模块为例,按照如下步骤即可:

步骤1: 事前确认

一般出现这种需求是nginx已经安装完毕,否则下载nginx的源码以及模块的源码直接编译即可,但是更为一般的情况需要确认已安装的nginx版本和编译时的设定,首先需要执行如下命令获取此信息。

执行命令: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]# 

这样我们了解到了当前的nginx版本为1.16.1,同时也获取到了编译时所用到的配置设定内容。
同时设定subs_filter,确认当前状态下会出错,以确认安装和设定动作是否正常。

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

详细方法可参看:https://liumiaocn.blog.csdn.net/article/details/104104790

步骤2: 下载源码

下载nginx的源码

根据需要此处下载1.16.1的nginx的源码

下载命令: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]# 

解压nginx源码

[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]#

获取subs_filter源码

使用如下命令获取subs_filter的源码

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]# 

步骤3: 重新编译

在步骤1中获取的编译设定选项中添加如下内容

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

注意:路径需要修改为git clone命令生成的目录一致

然后使用./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]# 

注:with-ipv6 nginx 选项在 nginx 1.11.5版本之后会自动判断,本文主要介绍定制安装和设定的方法,此处不再赘述。

常见错误与对应方法

一般都收缺少安装组件,为了避免configure命令出错,执行之前建议先将如下常见错误的内容所需要的包使用yum进行安装

  • 错误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"

对应方法:yum -y install redhat-rpm-config.noarch

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

对应方法:yum -y install pcre-devel

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

对应方法:yum -y install openssl openssl-devel

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

对应方法:yum -y install libxml2 libxml2-dev libxslt-devel

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

对应方法:yum -y install gd-devel

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

对应方法:yum -y install perl-devel perl-ExtUtils-Embed

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

对应方法:yum install gperftools -y

步骤4: 编译

使用make命令即可进行编译

[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]#

步骤5: 安装

使用make install即可完成安装

[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]#

步骤6: 结果确认

重新启动nginx服务,并重新加载服务

[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]#

可以看到不再出现unknown directive “subs_filter”(无法识别subs_filter指令)的错误信息,说明此时三方模块已经起作用了。

发布了1028 篇原创文章 · 获赞 1290 · 访问量 398万+

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/104104888