1.防止盗链 {#1-防止盗链}
要防止特定路径下的图片被盗链,可以在Nginx配置中针对图片文件的请求进行防护。以下是一个示例配置,假设你的图片存放在/img/
路径下:
server {
listen 80;
server_name *.liuzijian.com;
<span class="token directive"><span class="token keyword">location</span> /img/</span> <span class="token punctuation">{</span>
<span class="token directive"><span class="token keyword">valid_referers</span> none blocked *.liuzijian.com</span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">if</span> (<span class="token variable">$invalid_referer</span>)</span> <span class="token punctuation">{</span>
<span class="token directive"><span class="token keyword">return</span> <span class="token number">403</span></span><span class="token punctuation">;</span> <span class="token comment"># 返回403 Forbidden</span>
<span class="token punctuation">}</span>
<span class="token directive"><span class="token keyword">alias</span> /public/img/</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
}
注意 :为防止目录穿越,alias使用时,location /img/
需要使用/
闭合,不可写成location /img
,以下同理。
解释:
location /img/
仅针对/img/路径下的请求。valid_referers
指令确保只有来自你的域名的请求可以访问这些图片。
重新加载Nginx配置后,这将有效防止其他网站直接链接到你存放在/img/路径下的图片。
2.允许例外 {#2-允许例外}
如果你希望在某个特定图片上允许盗链,可以进行更细粒度的控制。
server {
listen 80;
server_name *.liuzijian.com;
<span class="token comment"># 允许盗链的特定图片</span>
<span class="token directive"><span class="token keyword">location</span> = /img/logo.jpg</span> <span class="token punctuation">{</span>
<span class="token comment"># 允许所有Referer</span>
<span class="token directive"><span class="token keyword">add_header</span> Access-Control-Allow-Origin *</span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">alias</span> /img/logo.jpg</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment"># 其他图片路径的防盗链设置</span>
<span class="token directive"><span class="token keyword">location</span> /img/</span> <span class="token punctuation">{</span>
<span class="token directive"><span class="token keyword">valid_referers</span> none blocked *.liuzijian.com</span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">if</span> (<span class="token variable">$invalid_referer</span>)</span> <span class="token punctuation">{</span>
<span class="token directive"><span class="token keyword">return</span> <span class="token number">403</span></span><span class="token punctuation">;</span> <span class="token comment"># 返回403 Forbidden</span>
<span class="token punctuation">}</span>
<span class="token directive"><span class="token keyword">alias</span> /public/img/</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
}
解释:
location = /img/logo.jpg
允许对特定图片的访问,无论Referer如何。add_header Access-Control-Allow-Origin *;
可以使该图片支持跨域访问(如果需要)。
这样配置后,只有logo.jpg
会被允许盗链,而其他图片则受到保护。请根据需要调整文件路径和配置。
3.阻止某个目录下特定格式图片被访问 {#3-阻止某个目录下特定格式图片被访问}
location ~* ^/img/.*\.(jpg|png|gif)$ {
deny all;
}
解释:
这段 Nginx 配置的作用是禁止访问特定路径下的图片文件 。具体来说,它禁止了 /img/
目录下的所有 .jpg
、.png
和 .gif
文件的访问。
~*
: 这是一个正则表达式匹配操作符,用于进行不区分大小写的正则匹配 。~
表示大小写敏感的正则匹配,而 ~*
表示不区分大小写。
^/img/.*\.(jpg|png|gif)$
: 这是匹配请求路径的正则表达式。具体解析如下:
^/img/
: 以/img/
开头的路径。.*
: 匹配零个或多个任意字符(即匹配/img/
目录下的所有文件及子目录)。\.(jpg|png|gif)
: 匹配以.jpg
、.png
或.gif
结尾的文件名。注意:\.
是转义字符,表示字面上的点号.
。$
: 匹配字符串的结尾,确保正则匹配到文件扩展名的结尾。
总结来说,这个正则表达式会匹配所有位于 /img/
路径下,且扩展名为 .jpg
、.png
或 .gif
的文件(不区分大小写)。
deny all;
deny all;
: 这条指令表示拒绝所有人 访问符合上述location
条件的文件。也就是说,任何请求访问/img/
目录下的.jpg
、.png
或.gif
文件,都会被返回一个 403 Forbidden 错误,禁止访问。