最近整理资源服务器出现了一个问题,那就盗链。
资源服务器是采用NGINX部署服务,NGINX是一个高性能的HTTP和反向代理web服务器,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。NGINX-IMAGE-FILTER-WATERMARK 是一款适用NGINX的水印插件,正好是我所需要的模块。
本站是采用Markdown语法来记录文章,而Typora笔记本也是采用Markdown语法,意味着图像资源可以在不同环境下加载访问,如果在资源服务器检测Referer的话固然可以避免盗链,但是Typora就打不开图像,由此萌生出给图像添加水印的想法。为了方便快捷更新图像资源,资源服务器是搭建在本地+远程备份,只要把图片拖到桌面映射出来的文件夹,图像即可全球访问,而且采用CDN加速图像资源。如果发生大范围盗链,不仅仅会导致图像加载缓慢,而且会消耗CDN资源。在资源限制这件事上,至少是必要的。
下载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-IMAGE-FILTER-WATERMARK模块需要在NGINX编译的过程中加入
./configure --with-http_image_filter_module
make
make install
编译的过程中可能会出现依赖问题没有解决,可以根据提示安装对于的依赖包
因为没有在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
显示一张样图试试?效果还是不错的