一.静态请求分离:
需要:公司网站静态文件太多了,访问起来很慢,比如说视频,图片,很占用流量带宽。或者你在云服务器上的备案信息更改了(比如说www.1.com),需要注销才能变动,那么你先可以域名解析到香港、美国的云服务器上,但是访问速度太慢了,导致视频严重卡顿,这个时候你可以把视频,图片放到国内的备案的云主机上(www.2.com),解决你的域名注销不能访问,又不会太卡顿的问题。
虚拟主机配置:
server
{
listen 80;
server_name www.1.com;
index index.html;
root /data/wwwroot/www.1.com;
location ~* ^.+\.(jpg|jpeg|gif|css|js|png)$
{
rewrite /(.*) http://www.2.com/$1 permanent;
}
access_log /tmp/1.log ligen;
}
测试:
curl -x127.0.0.1:80 www.1.com/1.png -I
HTTP/1.1 301 Moved Permanently
Location: http://www.2.com/1.png
二.防盗链:
就是防止别人转载你网站的链接,消耗我们网站的带宽流量
虚拟主机配置:
server
{
listen 80;
server_name www.1.com;
index index.html;
root /data/wwwroot/www.1.com;
location ~* ^.*\.(jpg|jpeg|png|gif|css|png|js|rar|zip|flv)$
{
valid_referers none blocked server_names *.1.com 1.com;
if ($invalid_referer)
{
return 403;
}
}
access_log /tmp/1.log ligen;
}
valid_referer:建立白名单,符合白名单的放行。
none:表示空referer,正常浏览器访问,不是从其他地方跳转过来的。
blocked:表示不是http或者https开头的经过改变的referer。
server_name:表示具体的白名单域名,是可以从这些网站跳过来的。
$invalid_referer:黑名单,不是白名单里面的都属于。
上面代码黑名单返回403。
测试:
-e:指定referer。
curl -e "http://www.1.com/1.html" -x127.0.0.1:80 www.1.com/1.png -I
HTTP/1.1 404 Not Found #404,不是403,表示可以访问,只不过网站上没有1.png文件。
curl -e "http://www.2.com/1.html" -x127.0.0.1:80 www.1.com/1.png -I
HTTP/1.1 403 Forbidden #www.2.com不在白名单里。
rewrite多个条件的并且:
首先,nginx暂时不支持if语句嵌套。
curl -A :指定浏览器标识
server
{
listen 80;
server_name www.1.com;
index index.html;
root /data/wwwroot/www.1.com;
location /
{
set $a 0; #设置变量a 值为0
if ($request_uri ~ "^/abc/")
{
set $a "${a}1"; #if如果为真,此a为01。
}
if ($http_user_agent ~* 'IE|chrome')
{
set $a "${a}2";
}
if ($a = "012")
{
return 403;
}
}
}
测试:
curl -A "IE" -x 127.0.0.1:80 www.1.com/abc/1.html
<html>
<head><title>403 Forbidden</title></head>
curl -A "IiaE" -x 127.0.0.1:80 www.1.com/abc/1.html
<html>
<head><title>404 Not Found</title></head>