Rootop 服务器运维与web架构

nginx反向代理加防盗链配置

# 配置例子

server
{
	listen   80;
	server_name  www.rootop.org;

	root /home/web/www.rootop.org;
	
	location ~ .*\.(jpg|png|js|css)$
	{
		valid_referers none blocked server_names rootop.org;
		if ($invalid_referer)
		{
			return 404;
		}
		
		proxy_pass http://127.0.0.1:8080;
	}
	
	location /
	{
		proxy_pass http://127.0.0.1:8080;
	}
}

# 注意在防盗链的location中也要加一句proxy_pass,否则图片会从本地找,肯定会返回404状态码。

location ~ .*\.(jpg|png|js|css)$
{
	valid_referers none blocked server_names rootop.org;
	if ($invalid_referer)
	{
		return 404;
	}
	
	proxy_pass http://127.0.0.1:8080;
}

如果不加proxy_pass,在return 404这个地方很容易扰乱排错思路,以为是防盗链返回的404,实际是从本地找不到文件才返回的404.

# 防盗链参数解释

valid_referers 定义一个防盗链白名单
none 表示http请求头中没有Referer这个头信息
blocked 表示http请求头中虽然有Referer头信息,但是中间被防火墙或者被代理服务器删除。
server_names 表示设置的server_name
rootop.org 表示允许的Referer,支持通配符,也支持正则

符合以上条件的,nginx会将$invalid_referer这个内置变量的值设置为空字符串。
不符合的,也就是说Referer头信息不符合以上条件,比如 baidu.com,则会将$invalid_referer变量设置为1
这样通过if条件判断进行返回状态码,或者重定向到其他页面,比如一张图片。

参考官方文档:http://nginx.org/en/docs/http/ngx_http_referer_module.html#valid_referers

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/4646.html

赞赏

微信赞赏支付宝赞赏

作者:Venus

专注于 服务器运维与web架构 E-mail:venus#rootop.org

评论已关闭。