由于服务器在国外,国内访问起来就比较慢,常常打开一个页面要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,知乎,简书上找你中有我我中有你的复制粘贴。