在现代Web应用中,防盗链(Hotlinking Protection)是一种常见的安全措施,用于防止未经授权的站点直接链接到你的静态资源(如图片、视频等),Nginx 是一个高性能的HTTP和反向代理服务器,广泛用于处理静态内容,通过配置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的根目录或指定目录中。
“`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
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复