由于服务器在国外,国内访问起来就比较慢,常常打开一个页面要10S左右,看了下资源加载,基本都是静态资源拖慢了加载速度,遂萌生使用自建服务器将静态资源转移到距离大陆近的地理位置,加快访问速度。这里遇到两个坑:防跨站报错,以及使用防盗链阻止部分非正常流量。

”Access-Control-Allow-Origin has been blocked“

存放静态资源的网站建好后在其他域名引用需要关闭Nginx的防跨站,默认是开启的,不然就会报这个错误,需要将下面指令放入vhost的config中

 #允许传入的原站,我这里用*允许所有
add_header  'Access-Control-Allow-Origin'  '*' ;
# 该字段是必须的,用来列出浏览器的CORS请求会用到哪些HTTP方法支持GET PUT DELETE POST OPTIONS。
add_header  'Access-Control-Allow-Methods'  GET ;

保存后重启Nginx即可正常访问。

使用“valid referer”限制非法访问

Nginx提供了一个非常人性化的模块(一般自带)ngx_http_referer_module,该模块可以非常简便的配置referer中无效值的请求,官方给出的示例如下

valid_referers none blocked server_names
               *.example.com example.* www.example.org/galleries/
               ~\.google\.;

if ($invalid_referer) {
    return 403;
}

支持通配符以及正则表达式,如上方代码所示,使用正则时必须携带“~”符号。贴一下我自用的配置

location ~ .*\.(jpg|jpeg|gif|png|js|css|woff|tff|svg)$
{
expires      30d;
access_log off;
valid_referers server_names   ~.*bbloli.com ~^cloud.*;
    if ($invalid_referer){
        return 444;
    }
}

解释:访问jpg|jpeg|gif|png|js|css|woff|tff|svg等资源允许bbloli.com所有二级域名以及本身+允许cloud开头的所有域名

补充:

none:允许空referer,一般来自浏览器直接请求;

blocker:允许不是以http或https开头的字符串、和有referer但被防火墙或代理等删除了的。

关于配置referer的官方文档

遇到问题第一反应该查阅官方文档,而不是CSDN,知乎,简书上找你中有我我中有你的复制粘贴。

最后修改:2022 年 05 月 07 日
如果觉得我的文章对你有用,请随意赞赏