第一个月流量超了,加钱升级;第二个月又超,再升一档;到了第三个月还是被限速,这时候就该停下来想想,问题多半不在套餐大小上。网站流量超限月月发生,说明站上有个持续往外吐流量的口子没堵上,加套餐只是把浪费的成本一起放大。这种情况下的顺序是:先查是谁在耗流量,再决定要不要扩容。
一、按月超限,先怀疑这六类元凶
第一类是图片盗链。别的站直接引用你站上的图片地址,所有图片流量都由你的服务器承担,这类流量在日志里的特征是 Referer 指向陌生域名,请求路径集中在图片目录。第二类是没压缩的大图和大文件,一张原图两三 MB,首页放十张,一个访客就是二十多 MB,量一上来非常可观。第三类是站内视频和音频,这类文件动辄几十 MB,且支持拖动进度会触发多次分段请求。第四类是爬虫,尤其是那些不遵守限制、抓取频率很高的采集程序。第五类是备份和同步,有些站长把每日备份直接传到同一台机器的站内目录、再被同步工具反复读取。第六类是被当成图床用,论坛、外链图片被大量引用,访问日志里会出现大量来源不明的图片请求。
二、用访问日志确认到底是哪一类
判断盗链有一个很直接的办法:在访问日志里筛出图片、视频类后缀的请求,再看这些请求的 Referer。Referer 为空的是用户直接访问图片地址,属于正常情况;Referer 指向你自己的域名是站内引用,也正常;Referer 指向陌生域名,就是被别的站引用了。把这类请求按 Referer 域名分组统计,哪个域名引用得最多一目了然。
# 统计哪些外部域名在引用你站上的图片、视频,找出盗链来源
import re
from collections import Counter
from urllib.parse import urlparse
LOG = "/www/wwwlogs/example.com.log" # 改成你的访问日志路径
SELF = "example.com" # 你自己的域名
EXT = (".jpg", ".jpeg", ".png", ".gif", ".webp", ".mp4", ".mp3")
PAT = re.compile(r'(\S+) \S+ \S+ \[([^\]]+)\] "(\S+) ([^"]*)[^"]*" (\d+) (\d+) "([^"]*)" "([^"]*)"')
by_ref = Counter()
for line in open(LOG, "r", encoding="utf-8", errors="ignore"):
m = PAT.match(line)
if not m:
continue
ip, ts, method, url, status, size, referer, ua = m.groups()
path = url.split("?")[0].lower()
if not path.endswith(EXT) or not referer or referer == "-":
continue
host = urlparse(referer).netloc.lower()
if host and SELF not in host:
by_ref[host] += int(size)
for host, n in by_ref.most_common(20):
print("%8.1f MB %s" % (n / 1024 / 1024, host))
跑完把排在前面的域名逐个看一遍。常见的良性情况是搜索引擎的图片搜索、你自己的镜像备用域名、合作方正常的引用;需要处理的是那些完全陌生的域名,尤其是同时引用了大量图片的。记下这些域名的流量占比,处理前后各跑一次,能直接看出拦截有没有生效。
三、防盗链配置:改三行就生效
确认被盗链之后,在 Nginx 里加一段防盗链规则即可。原理是对图片、视频类请求检查 Referer,来源不在允许列表里就返回 403,让对方页面上的图片直接显示不出来。下面这段配置放在站点 server 块里,valid_referers 里的域名改成你自己的,图片和视频后缀按站点实际情况增删。改完先 nginx -t 检查语法,再 reload。
# Nginx:图片与视频防盗链,非白名单来源的引用一律拒绝
server {
listen 443 ssl;
server_name example.com www.example.com;
location ~* \.(jpg|jpeg|png|gif|webp|mp4|mp3)$ {
# 允许不带 Referer 的直接访问、允许自己的域名引用
valid_referers none blocked server_names example.com *.example.com;
if ($invalid_referer) {
return 403;
}
expires 30d;
add_header Cache-Control "public";
}
}
改完盯两件事。一是自己站内的图片是否正常显示,尤其是用了独立图片域名或者 CDN 的情况,容易把自家来源误封;二是 403 的数量是否明显上升,上升说明规则在起作用。有些盗链方会伪造 Referer 绕过,这类靠防盗链挡不住,要转到限速和流量清洗上,用请求频次限制配合处理。
四、堵完口子再谈扩容
盗链、未压缩大图、爬虫这三类处理完,很多站的流量能直接掉三到五成,这时候再看用量,往往根本不需要升级套餐。真正该扩容的情形只有一种:流量确实来自真实用户的正常访问增长,日志里每个来源都干净,图片也压过了,那说明业务在涨,升级是值得的。顺序不要反:先查清是谁在耗流量,再决定花不花这笔钱。
相关阅读:
A5创业网 版权所有