2025年6月9日 星期一 乙巳(蛇)年 三月十三 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 服务器 > Nginx

用nginx在图像上打上你的印记

时间:05-27来源:作者:点击数:52

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

资源服务器是采用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语法的写作平台也能正常显示图像
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐