Nginx的防盗链配置

152 阅读1分钟

防盗链是一种保护服务器资源的手段,防止其他网站直接引用您的服务器上的资源(如图片、视频、文件等),从而节省带宽和资源。Nginx 通过配置 Referer 请求头来实现防盗链。

Nginx 防盗链配置示例

以下是一个简单的 Nginx 防盗链配置示例,允许特定域名访问资源,其他来源则会被阻止访问。

示例配置

假设我们希望保护 /images 目录,只有来自 example.comexample.org 的请求可以访问,其他所有来源的请求都会返回 403 Forbidden 状态。

nginx
复制代码
server {
    listen 80;
    server_name example.com;

    location /images/ {
        valid_referers none blocked example.com example.org;  # 允许的来源
        if ($invalid_referer) {  # 如果来源无效
            return 403;  # 返回 403 Forbidden
        }
        
        # 正常处理请求的配置
        root /var/www/html;
    }

    # 其他配置...
}

配置说明

  1. valid_referers:指定哪些 Referer 来源是被允许的。

    • none:允许没有 Referer 的请求(直接输入 URL 的情况)。
    • blocked:允许 Referer 头被防火墙或代理服务器删除的请求。
    • example.com example.org:允许来自 example.comexample.org 域名的请求。
  2. if ($invalid_referer) :检查请求的 Referer 是否有效。如果 Referer 不在允许的列表中,Nginx 将设置变量 $invalid_referer1

  3. return 403:如果 Referer 无效,则返回 HTTP 状态码 403 Forbidden,拒绝请求。

  4. root /var/www/html:定义正常情况下的资源路径,允许访问的请求将根据此路径提供服务。

高级配置示例

有时候,我们可能希望为防盗链返回一个默认的图片(比如一张“防盗链”的警告图片),而不是返回 403 Forbidden 错误。以下是修改后的配置:

nginx
复制代码
server {
    listen 80;
    server_name example.com;

    location /images/ {
        valid_referers none blocked example.com example.org;
        if ($invalid_referer) {
            rewrite ^/images/.*$ /images/nohotlink.jpg last;  # 返回默认图片
        }

        root /var/www/html;
    }

    location = /images/nohotlink.jpg {  # 定义防盗链图片的位置
        root /var/www/html;
    }

    # 其他配置...
}

配置说明

  • rewrite:如果 Referer 无效,则将所有对 /images/ 目录的请求重写到 /images/nohotlink.jpg,这张图片会显示“禁止盗链”的信息。
  • location = /images/nohotlink.jpg:指定防盗链图片的实际位置,确保该图片可以被合法访问。

总结

通过配置 Nginx 的防盗链,可以有效保护服务器的资源,防止其他网站未经授权引用您的内容。配置时要小心选择允许的来源和处理无效 Referer 的方式,以确保正常用户的体验不会受到影响。