admin

为已安装的 Nginx 添加图片水印模块
前言之前给 Nginx 图片服务器做了简单的防盗链配置,但感觉还是不太靠谱,要是别人采集时是将图片也采集下载到本地...
扫描右侧二维码阅读全文
23
2018/01

为已安装的 Nginx 添加图片水印模块

前言

之前给 Nginx 图片服务器做了简单的防盗链配置,但感觉还是不太靠谱,要是别人采集时是将图片也采集下载到本地,那么防盗链的做法将起不到作用了,所以想给图片服务器加一波水印功能。结果参照网上配置,很不幸的是模块未安装。

解决问题

自己编译安装过 Nginx 的的都知道,模块是在编译的时候以参数的时候添加的,也就是编译的过程中添加的,那么已经安装好的 Nginx 该如何添加模块?

好在前人早就遇到过这种问题了,网上一搜就能找到办法,在此我也只是记录一下自己动手操作的过程。

解决办法最终还是要下载 Nginx 源码重新编译,在编译的时候将要添加的模块添加进去,在这里我要加的模块是 ngx_image_thumb。下面一步一步地来动手操作:

  1. 下载 Nginx 源码并解压

/home# wget http://nginx.org/download/nginx-1.9.6.tar.gz
/home# tar -zxvf nginx-1.9.6.tar.gz

/home# cd nginx-1.9.6

  1. 下载ngx_image_thumb模块

/home/nginx-1.9.6# git clone https://github.com/oupula/ngx_image_thumb.git

  1. 查看当前 Nginx 安装参数(确保重新编译的 Nginx 配置文件路径一致以及保留原先安装的模块)

/home/nginx-1.9.6# nginx -V
nginx version: nginx/1.4.6 (Ubuntu)

built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro' --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 --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-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_spdy_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module

  1. 如果之前一些依赖库没安装的话,可以先安装一下,在这里ngx_image_thumb模块需要的依赖库如下,以 Ubuntu 安装为例

/home/nginx-1.9.6# apt-get install libgd2-noxpm-dev libcurl4-openssl-dev libpcre3-dev

  1. 添加ngx_image_thumb模块,编译 Nginx

/home/nginx-1.9.6# ./configure --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro' --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 --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-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_spdy_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module --add-module=ngx_image_thumb

注意最后面添加的--add-module=ngx_image_thumb这里就是我要添加的新的模块,由于我是在 Nginx 源码的目录里面 clone 的ngx_image_thumb模块,所以相当于和configure同级目录,所以直接写的--add-module=ngx_image_thumb,如果下载在其他地方,就用绝对路径。

在执行./configure的时候,可能会提示一些依赖库的错误:

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

  1. You can either do not enable the module or install the libraries.
    # apt-get install libxml2 libxslt1-dev

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

You can either do not enable the module or install the libraries.
# apt-get install libgd2-xpm libgd2-xpm-dev

./configure: error: the GeoIP module requires the GeoIP library.

You can either do not enable the module or install the library.
# apt-get install libgeoip-dev

...(其他的不一一列举了)

  1. 接下来执行make

/home/nginx-1.9.6# make

执行完毕后切记不要执行make install了,如果执行就将之前的 Nginx 覆盖了(有人可能会说,反正参数说明的都一样,覆盖就覆盖了吧,但如果配置文件覆盖了呢?这个我没测试,以防万一还是不要执行make install

  1. 此时编译完成,生成了 Linux 下的可执行文件 nginx,相当于 windows 上的 exe 文件,现在要做的就是替换掉原来的 nginx 可执行文件,和 windows 上面打补丁或者替换破解文件差不多,为确保安全,最好先备份下原先的 nginx

# cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
# cp ./objs/nginx /usr/local/nginx/sbin/

如果是通过apt-get install或者yum install等命令安装的,可能上面的复制替换不起作用(当然了以绝对路径执行是没问题的,比如:/usr/local/nginx/sbin/nginx),因为通过这种方式安装的 Nginx,为了能够不用绝对路径执行 Nginx 命令,就会将nginx放置系统环境变量PATH/usr/sbin/目录下,所以此时按照上面方法替换即可:

# cp /usr/sbin/nginx /usr/sbin/nginx.bak

# cp ./objs/nginx /usr/sbin/

如果 Nginx 正在运行,可能会提示:

cp: cannot create regular file ‘/usr/sbin/nginx’: Text file busy

# nginx -s stop
# cp ./objs/nginx /usr/local/nginx/sbin/

先停止 Nginx 再执行即可。

  1. 查看当前 Nginx 版本及模块信息:

# nginx -V
nginx version: nginx/1.9.6

built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
built with OpenSSL 1.0.1f 6 Jan 2014
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro' --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 --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-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module --add-module=ngx_image_thumb

可以看到 Nginx 版本已经升级成 1.9.6(之前做过一次对已安装的 Nginx 进行升级也是这个方法),并且ngx_image_thumb模块也成功安装。

总结

整个操作过程看起来比较麻烦,但思路还是比较清晰,记住如下几点即可:重新编译符合我们需求的 Nginx 版本,确保原先的 Nginx 配置不被替换,保留原先的功能模块。

补充

**ngx_image_thumb这个国产模块大家还是不要用得好,亲测水印无效果,issue 有人反映作者也没回答,最后改用`nginx-image-filter-watermark
`成功添加水印。**

Last modification:January 23rd, 2018 at 11:46 pm
If you think my article is useful to you, please feel free to appreciate

2 comments

  1. ss

    (๑•̀ㅁ•́ฅ) 看到后面笑喷了。。

  2. test

    icon_mad.gif icon_mad.gif icon_mad.gif icon_mad.gif icon_mad.gif icon_mad.gif icon_mad.gif

Leave a Comment