Skip to content

图床-faq

如何防护

自己利用网站服务器的nginx的某个目录/images来作为md图床使用,如何防止别人利用爬虫程序来爬取我网站图床里/images下的所有图片呢?

防止爬虫爬取网站/images目录下的图片,你可以采取以下几种措施来保护你的Nginx服务器上的图床:

  1. 修改 robots.txt 文件

    • 在你的网站根目录下创建或修改 robots.txt 文件,使用 Disallow 语句来告诉遵守规则的爬虫不要爬取 /images 目录。
    plaintext
    User-agent: *
    Disallow: /images/

    但是请注意,不是所有的爬虫都会遵守 robots.txt 的规则,恶意爬虫通常会忽视这个文件。

    NOTE

    但是,在哪里创建呢?

  2. 使用 HTTP 基本认证

    • 通过在Nginx中配置HTTP基本认证,要求用户输入用户名和密码才能访问 /images 目录。
    nginx
    location /images/ {
        auth_basic "Restricted Access";
        auth_basic_user_file /path/to/htpasswd;
    }

    这个方法可以有效防止未授权的用户访问图片,但如果密码泄露或被破解,仍然存在风险。

  3. 限制IP访问

    • 如果你的图床仅供特定用户或系统使用,你可以通过设置允许列表来限制只有特定的IP能够访问 /images 目录。
    nginx
    location /images/ {
        allow 192.168.1.1; # 允许的IP地址
        deny all; # 拒绝其他所有请求
    }
  4. 限制 Referer

    • 通过检查 HTTP Referer 头来限制图片只能由你网站上的页面引用。
    nginx
    location ~* \.(gif|png|jpe?g)$ {
        valid_referers none blocked yourdomain.com *.yourdomain.com;
        if ($invalid_referer) {
            return 403;
        }
    }

    这个方法可以一定程度上阻止图片被其他网站直接引用,但 Referer 头可以被伪造,因此并不是完全可靠的。

  5. 使用防爬虫规则

    • 通过设置一些防爬虫的规则来阻止爬虫。例如,使用 limit_req_modulelimit_conn_module 来限制每个IP的访问频率和连接数。
    nginx
    http {
        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;
        }
    }
  6. 加密图片名称

    • 定期更改 /images 目录的图片文件名,并使用不容易被预测的命名模式。这样即使有人访问到了一部分图片,但在你更新命名后他们的链接也会失效。
  7. 设置CORS策略

    • 如果你想防止图片被其他网站直接引用,你可以通过设置CORS策略来实现。
    nginx
    location /images/ {
        if ($http_referer !~* ^(https?://)(www\.)?yourdomain\.com) {
            add_header 'Access-Control-Allow-Origin' 'yourdomain.com';
        }
    }

请记住,没有一种方法是万能的,可能需要结合使用多种策略来有效保护你的服务器。另外,确保对服务器进行定期的安全检查和维护,以便及时发现并处理安全漏洞。

最近更新