图床-faq
如何防护
自己利用网站服务器的nginx的某个目录/images来作为md图床使用,如何防止别人利用爬虫程序来爬取我网站图床里/images下的所有图片呢?
防止爬虫爬取网站/images
目录下的图片,你可以采取以下几种措施来保护你的Nginx服务器上的图床:
修改 robots.txt 文件
- 在你的网站根目录下创建或修改
robots.txt
文件,使用Disallow
语句来告诉遵守规则的爬虫不要爬取/images
目录。
plaintextUser-agent: * Disallow: /images/
但是请注意,不是所有的爬虫都会遵守
robots.txt
的规则,恶意爬虫通常会忽视这个文件。NOTE
但是,在哪里创建呢?
- 在你的网站根目录下创建或修改
使用 HTTP 基本认证
- 通过在Nginx中配置HTTP基本认证,要求用户输入用户名和密码才能访问
/images
目录。
nginxlocation /images/ { auth_basic "Restricted Access"; auth_basic_user_file /path/to/htpasswd; }
这个方法可以有效防止未授权的用户访问图片,但如果密码泄露或被破解,仍然存在风险。
- 通过在Nginx中配置HTTP基本认证,要求用户输入用户名和密码才能访问
限制IP访问
- 如果你的图床仅供特定用户或系统使用,你可以通过设置允许列表来限制只有特定的IP能够访问
/images
目录。
nginxlocation /images/ { allow 192.168.1.1; # 允许的IP地址 deny all; # 拒绝其他所有请求 }
- 如果你的图床仅供特定用户或系统使用,你可以通过设置允许列表来限制只有特定的IP能够访问
限制 Referer
- 通过检查 HTTP Referer 头来限制图片只能由你网站上的页面引用。
nginxlocation ~* \.(gif|png|jpe?g)$ { valid_referers none blocked yourdomain.com *.yourdomain.com; if ($invalid_referer) { return 403; } }
这个方法可以一定程度上阻止图片被其他网站直接引用,但
Referer
头可以被伪造,因此并不是完全可靠的。使用防爬虫规则
- 通过设置一些防爬虫的规则来阻止爬虫。例如,使用
limit_req_module
和limit_conn_module
来限制每个IP的访问频率和连接数。
nginxhttp { limit_req_zone $binary_remote_addr zone=images:10m rate=5r/m; limit_conn_zone $binary_remote_addr zone=addr:10m; } server { location /images/ { limit_req zone=images burst=10 nodelay; limit_conn addr 3; } }
- 通过设置一些防爬虫的规则来阻止爬虫。例如,使用
加密图片名称
- 定期更改
/images
目录的图片文件名,并使用不容易被预测的命名模式。这样即使有人访问到了一部分图片,但在你更新命名后他们的链接也会失效。
- 定期更改
设置CORS策略
- 如果你想防止图片被其他网站直接引用,你可以通过设置CORS策略来实现。
nginxlocation /images/ { if ($http_referer !~* ^(https?://)(www\.)?yourdomain\.com) { add_header 'Access-Control-Allow-Origin' 'yourdomain.com'; } }
请记住,没有一种方法是万能的,可能需要结合使用多种策略来有效保护你的服务器。另外,确保对服务器进行定期的安全检查和维护,以便及时发现并处理安全漏洞。