用NGINX给全站图片加上水印

由 夏日冰菓 发布

在图像上打上你的印记

202107122349

最近整理资源服务器出现了一个问题,那就盗链。

资源服务器是采用NGINX部署服务,NGINX是一个高性能的HTTP和反向代理web服务器,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。NGINX-IMAGE-FILTER-WATERMARK 是一款适用NGINX的水印插件,正好是我所需要的模块。

本站是采用Markdown语法来记录文章,而Typora笔记本也是采用Markdown语法,意味着图像资源可以在不同环境下加载访问,如果在资源服务器检测Referer的话固然可以避免盗链,但是Typora就打不开图像,由此萌生出给图像添加水印的想法。为了方便快捷更新图像资源,资源服务器是搭建在本地+远程备份,只要把图片拖到桌面映射出来的文件夹,图像即可全球访问,而且采用CDN加速图像资源。如果发生大范围盗链,不仅仅会导致图像加载缓慢,而且会消耗CDN资源。在资源限制这件事上,至少是必要的。

第一步:下载NGINX源码

下载NGINX源码,模块要求不低于 nginx >= 1.11.6 版本,点击进入NGING官网下载最新版本源码包。这里以 nginx-1.21.1 为例,

wget http://nginx.org/download/nginx-1.21.1.tar.gz
解压压缩文件
tar -zxvf nginx-1.21.1.tar.gz

第二步:准备水印模块文件

在NGINX-IMAGE-FILTER-WATERMARK项目页下载源码包,并且解压压缩文件

项目地址:https://github.com/intaro/nginx-image-filter-watermark

本地下载

unzip nginx-image-filter-watermark-master.zip

解压完成后把 ngx_http_image_filter_module.c 文件覆盖到 NGINX 源码中,目录是 /src/http/modules/ngx_http_image_filter_module.c

第三步:安装编译环境依赖环境

系统不同,按需选择

## Debian & Ubantu ##
apt-get update
apt-get install gcc
apt-get install libpcre3 libpcre3-dev
apt-get install openssl libssl-dev
apt-get install zlib1g-dev
apt-get install libgd-dev

## Centos ##
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel

第四步:编译安装NGINX

这点是我头疼的一点,需要把已上线的服务卸载重新编译,因为NGINX-IMAGE-FILTER-WATERMARK模块需要在NGINX编译的过程中加入

./configure --with-http_image_filter_module
make
make install

编译的过程中可能会出现依赖问题没有解决,可以根据提示安装对于的依赖包

第五步:配置NGINX和水印模块

因为没有在configure的时候指定NGINX的安装目录,所以NGINX被默认安装在 /usr/local 下面

修改nginx.conf文件,可以根据图像目录来选择是否开启水印

location /img/ {   #在img目录下开启水水印,可改成主目录 
        image_filter watermark;  #开启水印 
        image_filter_watermark "PATH_TO_FILE";   #水印文件位置 
        image_filter_watermark_position center-center;   #水印位置 
        image_filter_jpeg_quality   95;   #图片质量 
        image_filter_buffer         10M;   #缓存 
        image_filter_watermark_width_from 400;   # 打水印的图片最小宽度,只有大于这个宽度的才会打水印 
       image_filter_watermark_height_from 400;  #打水印的图片最小高度,只有大于这个高度的才会打水印 
} 

开启NGINX服务

/usr/local/nginx/sbin/nginx

如果更改了配置文件可以输入以下命令重新加载服务

/usr/local/nginx/sbin/nginx -s reload

显示一张样图试试?效果还是不错的

image-20210713010351066

总结

  • 开启水印后,所有通过链接访问的图片都会添加水印,本地图片文件不受水印影响
  • 标记图像来源处,能够大幅度避免网站盗链或盗用
  • 最后在支持Markdown语法的写作平台也能正常显示图像

暂无评论

发表评论