1. 闲不住的人首页
  2. 网站服务

Nginx防盗链模块

ngx_http_referer_module 模块,可以用来实现网站防盗链功能,防止站点的某些图片类型的资源被其它网站所盗用。

配置指令:

valid_referers    none | blocked | server_names | string …;

none:请求报文首部没有 referer 首部;
blocked:请求报文的 referer 首部没有值;
server_names:其值是主机名;
arbitrary sering:直接字符串,可以使用 * 作为通配符;
regular expression:被指定的正则表达是模式匹配到的字符串;要使用 ~ 起始;

示例:

root@opsbj-nginx:~ # cat /etc/nginx/conf.d/demo.conf
server {
  listen 80;
  server_name 10.100.4.169;
  index index.html index.htm;
  access_log /var/log/nginx/demo_access.log;

  location / {
    root /data/demo/;
    deny 10.100.4.181;
    allow 10.100.4.0/24;
    deny all;
  }

  # ngx_http_auth_basic 模块示例如下面代码
  location /admin/ {
    root /data/demo/;
    auth_basic "Enter username and password.";
    auth_basic_user_file /etc/nginx/.htpasswd;
  }
  # ngx_http_stub_status_module 状态信息模块
  location = /basic_status {
    stub_status;
  }
  # ngx_http_referer_module 模块防盗链示例如下代码
  location ~* \.(gif|jpg|png|jpeg)$ {
    valid_referers none blocked server_names *.opsbj.com opsbj.* ~\.opsbj\.;
    if ($invalid_referer) {
      return 403;
    }
  }
}
root@opsbj-nginx:~ # nginx -s reload

上面示例的意思是,如果客户端请求不是从 .opsbj.com,opsbj.,或者包含 opsbj 字符串的其中任意一个主机,都返回 403。

重载 Nginx 服务后通过在命令行使用 curl 命令测试:

  • 测试正常访问测试返回状态为 200
root@opsbj-nginx:~ # curl -I http://10.100.4.169/wechat.png
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sun, 07 Apr 2019 07:48:16 GMT
Content-Type: image/png
Content-Length: 163641
Last-Modified: Fri, 05 Apr 2019 23:53:00 GMT
Connection: keep-alive
ETag: "5ca7ea5c-27f39"
Accept-Ranges: bytes
  • 模拟 referer 从 www.baidu.com 请求过来的返回403错误
root@opsbj-nginx:~ # curl -I -e http://www.baidu.com http://10.100.4.169/wechat.png
HTTP/1.1 403 Forbidden
Server: nginx/1.14.2
Date: Sun, 07 Apr 2019 07:48:41 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive

如果觉得文章不错,不妨给个打赏,写作不易,各位的支持,能激发和鼓励我更大的写作热情。谢谢!

原创文章,作者:恩志,如若转载,请注明出处:https://www.xbzdr.com/327.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

在线咨询:点击这里给我发消息

邮件:510749025@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code