Nginx 学习笔记 (5) —— 被反代被镜像了怎么办?
须知请求头的所有字段都是可以被人为修改的,镜像跟反镜像、反盗链跟反反盗链……都是一个斗智斗勇的过程,没有办法一劳永逸。以下几招,按需取用。
封锁 IP 段,也可以用来遵守特定国家的法令(譬如锁区、GDPR 等);屏蔽 UA 这招有点“防君子不防小人”,不过起码能挡住一批小白。
deny xxx.xxx.0.0/16;
if ($http_user_agent ~* (spider|bot)) { return 403; }
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { return 403; }
禁止 IP 直接访问,防止 DNS 恶意解析:
server {
listen 80 default_server;
server_name _;
return 444;
}
图片反盗链。如果 Referer 与 valid_referers 约定不符,$invalid_referer 变为 1,服务器返回 403 Forbidden。
location ~* \.(jpg|jpeg|png|gif|tiff|webp)$ {
valid_referers none blocked yourdomain.com;
if ($invalid_referer) { return 403; }
}
始终返回 Gzip 过的内容,能稍微增加对方替换的难度。最后是访问认证:借由 httpd-tools 里的 htpasswd 生成密码文件,再修改 server.conf。应当搭配 HTTPS;因浏览器会记住密钥,缺乏合理的注销手段,故不建议大量使用(通常应用于内网)。
yum install httpd-tools
cd /usr/local/nginx/conf && htpasswd -bc passwd admin password
auth_basic 'Confirm password to continue';
auth_basic_user_file passwd;
<small>原载 App-scope,有删改。</small>