如何配置Nginx以实现图片防盗链保护?

Nginx图片防盗链配置实例:通过设置referer,限制只有特定域名可以访问你的图片资源。

在现代Web应用中,防盗链(Hotlinking Protection)是一种常见的安全措施,用于防止未经授权的站点直接链接到你的静态资源(如图片、视频等),Nginx 是一个高性能的HTTP和反向代理服务器,广泛用于处理静态内容,通过配置Nginx,可以有效地防止其他网站盗用你的带宽和资源,下面将详细介绍如何配置Nginx来实现图片防盗链功能。

如何配置Nginx以实现图片防盗链保护?

Nginx 图片防盗链基本配置

确保你已经安装了Nginx并正在运行,如果没有安装,可以参考Nginx官方文档进行安装。

1、打开 Nginx 配置文件

Nginx的主配置文件位于/etc/nginx/nginx.conf 或者/etc/nginx/sitesavailable/default,使用你喜欢的文本编辑器打开这个文件:

“`bash

sudo nano /etc/nginx/sitesavailable/default

“`

2、配置防盗链规则

在server块或location块中添加以下配置:

“`nginx

server {

listen 80;

server_name example.com;

location ~* .(jpg|jpeg|gif|png|svg)$ {

valid_referers none blocked yourdomain.com *.yourdomain.com;

if ($invalid_referer) {

return 403;

}

}

}

“`

解释:

location ~.(jpg|jpeg|gif|png|svg)$匹配所有请求以.jpg,.jpeg,.gif,.png,.svg 结尾的URL。

valid_referers none blocked yourdomain.com *.yourdomain.com;:定义合法的Referer头信息,可以是空(即直接访问),也可以是指定的域名及其子域名。

if ($invalid_referer) { return 403; }:如果Referer不合法,则返回403 Forbidden错误。

3、测试配置并重启Nginx

在修改配置文件后,需要测试配置文件是否正确:

“`bash

sudo nginx t

“`

如果测试通过,没有错误提示,那么重启Nginx使配置生效:

“`bash

sudo systemctl restart nginx

“`

进阶配置:自定义错误页面

你可以为403 Forbidden错误自定义一个友好的错误页面,提升用户体验。

1、创建自定义错误页面

创建一个HTML文件作为错误页面,例如403.html,并将其放在Nginx的根目录或指定目录中。

如何配置Nginx以实现图片防盗链保护?

“`html

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF8">

<title>Forbidden</title>

</head>

<body>

<h1>Sorry, you do not have permission to access this page.</h1>

<p>If you believe you are receiving this message in error, please contact the website administrator.</p>

</body>

</html>

“`

2、配置错误页面路径

在Nginx配置文件中的server块内添加以下配置来指定错误页面:

“`nginx

error_page 403 /custom_403.html;

location = /custom_403.html {

internal;

}

“`

解释:

error_page 403 /custom_403.html;:当返回403状态码时,显示/custom_403.html页面。

location = /custom_403.html { internal; }:确保只有Nginx内部重定向能访问此错误页面。

3、重启Nginx

别忘了重启Nginx使新的配置生效:

“`bash

sudo systemctl restart nginx

“`

FAQs

Q1: 如果我想允许某些特定的外部域名访问我的图片资源,该如何配置?

A1: 你可以通过修改valid_referers 指令来允许特定的外部域名访问你的资源。

server {
    listen 80;
    server_name example.com;
    location ~* .(jpg|jpeg|gif|png|svg)$ {
        valid_referers none blocked yourdomain.com *.yourdomain.com alloweddomain.com *.alloweddomain.com;
        if ($invalid_referer) {
            return 403;
        }
    }
}

这样,alloweddomain.com及其子域名也可以访问你的图片资源。

Q2: 如何查看Nginx的Referer日志?

A2: 你可以在Nginx配置文件中启用Referer日志记录,以便查看哪些Referer正在尝试访问你的资源,在server块或location块中添加如下配置:

log_format custom '$remote_addr $remote_user [$time_local] "$request" '
                 '"$status" $body_bytes_sent "$http_referer" '
                 '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log custom;

查看Nginx的访问日志文件/var/log/nginx/access.log,你将会看到包含Referer信息的日志条目,这有助于你分析和调试防盗链配置的效果。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1098118.html

(0)
未希的头像未希新媒体运营
上一篇 2024-09-28 21:50
下一篇 2024-09-28 21:54

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入