文章

Nginx防盗链

防盗链与http的referer

image-20240324220131403

​ 防盗链本质上就是我们自己服务器上的资源,只能由我们自己服务器来访问,其他网站引用的这些资源不能访问。

​ 当我们的请求用户打到我们这台机器上,我们这台机器会给他寻找他所访问的一些资源,假设请求是个静态的 HTML 页面 index.html。这个页面里引用了一些其他的资源,这些资源都是在 HTML 的骨架里再次被访问的,比如说 CSS、js,它还会二次请求,甚至多次去请求我们当前这个站点,当再次请求的时候,
会在请求的request header 里加上一个参数叫 refer,这是 HTTP 协议所规定的,由浏览器来遵守的。
refer,在我们第二次访问的时候才有,在第一次访问的时候是没有的。

防盗链配置

valid_referers none | blocked | server_names | strings ....;
  • none, 检测 Referer 头域不存在的情况。
  • blocked,检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以“http://” 或 “https://” 开头。
  • server_names ,设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。

在需要防盗链的location中配置

	server {
        listen       80;
        server_name  localhost;
		
        location / {
			rewrite ^/([0-9]+).html$  /index.jsp?pageNum=$1 break;
			proxy_pass http://127.0.0.1:8080;
        }
		
		location ~*/(js|img|css) {
        	valid_referers 192.168.44.101;
			if ($invalid_referer) {
            rewrite ^/ /img/x.png break;
			#	return 401;
			}
			root /usr/local/nginx/static;
			index index.html index.htm;
        }
	

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

使用curl测试

curl -I http://192.168.44.101/img/logo.png

带引用

curl -e "http://baidu.com" -I http://192.168.44.101/img/logo.png
License:  CC BY 4.0