亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用Nginx為自己的網(wǎng)站資源加上防盜鏈保護(hù)實(shí)現(xiàn)

 更新時(shí)間:2023年08月30日 10:56:37   作者:fkjavaer  
這篇文章主要為大家介紹了使用Nginx為自己的網(wǎng)站資源加上防盜鏈保護(hù)實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

在這個(gè)流量為王的時(shí)代,掌握了流量密碼,就相當(dāng)于掌握了一切皆有可能的機(jī)遇,但是,越是流量為王,越該保持敬畏之心。

資源在獲得流量的過(guò)程中扮演著極其重要的角色,如果我們的資源沒(méi)有適當(dāng)?shù)谋Wo(hù)機(jī)制,就會(huì)造成很大的損失。為了保護(hù)資源,我們可以添加防盜鏈機(jī)制。

Nginx對(duì)實(shí)現(xiàn)靜態(tài)資源防盜鏈機(jī)制提供了很好的支持,接下來(lái)我們進(jìn)入實(shí)戰(zhàn)階段。主要分為以下兩種方式:

  • Referer信息校驗(yàn)
  • secure_link資源保護(hù)

Referer信息校驗(yàn)

Nginx靜態(tài)資源防盜鏈一文中,已經(jīng)詳細(xì)介紹過(guò)實(shí)現(xiàn)方法,我們這里簡(jiǎn)單回顧一下。

實(shí)現(xiàn)原理

當(dāng)瀏覽器向web服務(wù)器發(fā)起資源請(qǐng)求時(shí),會(huì)在請(qǐng)求頭中帶上Referer字段,告訴服務(wù)器請(qǐng)求是從哪個(gè)頁(yè)面過(guò)來(lái)的,服務(wù)器根據(jù)該信息進(jìn)行校驗(yàn)并響應(yīng)。

Nginx為我們提供了ngx_http_referer_module模塊,可以獲取請(qǐng)求頭中Referer字段,根據(jù)字段值返回不同的響應(yīng),就可以達(dá)到如果不是從我們自己網(wǎng)站發(fā)起的請(qǐng)求,就直接返回403禁止訪問(wèn)。

配置指令

作用域:server, location

語(yǔ)法:valid_referers none | blocked | server_names | string ...;

1)valid_referers none;

表示請(qǐng)求頭中不存在Referer字段。

2)valid_referers blocked;

表示請(qǐng)求頭中存在Referer字段,且其值不以http://或https://開(kāi)頭。

3)valid_referers server_names;

表示請(qǐng)求頭中存在Referer字段,且其值包含nginx配置文件中server_name的其中一個(gè)。

4)任意字符串

表示請(qǐng)求頭中存在Referer字段,且定義了服務(wù)器名稱(chēng)和可選的URI前綴。服務(wù)器名稱(chēng)的開(kāi)頭或結(jié)尾可以有一個(gè)“*”。在檢查過(guò)程中,“Referer”字段中的服務(wù)器端口被忽略。例如*.example.com example.*
www.example.org/galleries/

5)正則表達(dá)式

表示請(qǐng)求頭中存在Referer字段,且第一個(gè)符號(hào)應(yīng)該是“~”(Nginx解析正則表達(dá)式規(guī)范)。需要注意的是,表達(dá)式將從http://或https://之后開(kāi)始的文本相匹配。

6)配置示例

 valid_referers none blocked server_names *.example.com test.example.* ~\.example\.com

實(shí)戰(zhàn)

除了使用valid_referers指令外,我們還需要用到一個(gè)內(nèi)置變量$invalid_referer,如果Referer請(qǐng)求標(biāo)頭字段值被認(rèn)為有效,則$invalid_referer的值為空字符串,否則為“1”。

 # 如果獲取圖片時(shí),不是從www.example.com頁(yè)面發(fā)起的請(qǐng)求,則禁止訪問(wèn)。
 location ~^/.*\.(png|jpg|gif|jfif) {
     valid_referers www.example.com;
     if ($invalid_referer){
         return 403;
     }
     root   html;
 }

Tips:請(qǐng)求頭的Referer字段信息是可以通過(guò)程序偽裝生成的,因此根據(jù)Referer信息來(lái)實(shí)現(xiàn)防盜鏈并非100%可靠,但是,它能夠限制大部分的盜鏈。

secure_link資源保護(hù)

前面我們提到,在使用Referer信息進(jìn)行校驗(yàn)的時(shí)候,該字段信息可以通過(guò)程序偽裝生成,并非100%可靠。

Nginx提供了
ngx_http_secure_link_module模塊,可以對(duì)請(qǐng)求的鏈接進(jìn)行真?zhèn)涡r?yàn),并限制鏈接的有效時(shí)間。

官方文檔:
https://nginx.org/en/docs/http/ngx_http_secure_link_module.html

話不多少,開(kāi)整。

Tips:該模塊默認(rèn)不構(gòu)建,構(gòu)建時(shí)需要自行添加configure參數(shù)
--with-http_secure_link_module。

構(gòu)建過(guò)程,可參照Nginx基本命令&不停機(jī)版本升級(jí)一文進(jìn)行模塊添加。

實(shí)現(xiàn)原理

資源鏈接按照約定的規(guī)則生成,Nginx服務(wù)器對(duì)鏈接進(jìn)行真?zhèn)我约斑^(guò)期時(shí)間校驗(yàn)。

配置指令

ngx_http_secure_link_module模塊為我們提供了兩種校驗(yàn)?zāi)J剑?/p>

  • 通過(guò)secure_link_secret指令,檢查鏈接的真實(shí)性。
  • 通過(guò)secure_link與secure_link_md5指令,檢查鏈接的真實(shí)性,并限制鏈接的有效時(shí)間。

接下來(lái)看看具體配置語(yǔ)法吧。

secure_link_secret

secure_link_secret指令用于指定需要通過(guò)MD5算法加密的字符串,同時(shí)需要配合$secure_link內(nèi)置變量來(lái)對(duì)鏈接進(jìn)行校驗(yàn)。

作用域:location

語(yǔ)法:secure_link_secret word;

word:需要進(jìn)行MD5加密的字符串,例如your_secure_word。

URI格式:/prefix/hash/link,例如
/img/6b105c468b2a59681b799a7f532505e3/aa.jpg。

  • prefix:為不包含/的任意字符串,這里為img。
  • link:這里為aa.jpg。
  • hash:這里為link與word拼接之后的值(aa.jpgyour_secure_word)進(jìn)行MD5加密后的結(jié)果。

$secure_link:內(nèi)置變量,如果鏈接通過(guò)了真實(shí)性檢查,則其值設(shè)置為從/prefix/hash/link中提取link的值(包含前面的/),否則將其設(shè)置為空字符串。

secure_link

secure_link指令定義需要從URI中取出的參數(shù),包含MD5值和鏈接的有效時(shí)間。需要與secure_link_md 指令配合使用。

作用域:http, server, location

語(yǔ)法:secure_link expression;

配置示例:

http://192.168.110.101/img2/test.jfif?signature=vQ5_wrXQ_oxh5c3L9bbf8g&expires=1685003128

 # $arg_signature,$arg_expires意味著從URI中取出參數(shù)名為signature和expires的值
 secure_link $arg_signature,$arg_expires;

secure_link_md5

secure_link_md5指令定義一個(gè)表達(dá)式,計(jì)算表達(dá)式的MD5值,與URI傳遞的MD5值進(jìn)行比較。需要配合secure_link指令和$secure_link_expires內(nèi)置變量一起使用。

Tips:URI中MD5值以base64編碼的形式傳遞。

作用域:http, server, location

語(yǔ)法:secure_link_md5 expression;

配置示例:

 secure_link $arg_signature,$arg_expires;
 secure_link_md5 "$secure_link_expires$uri secret";

$secure_link_expires用于獲取secure_link中傳遞的expires的值。

secure_link與secure_link_md5指令的校驗(yàn)步驟如下:

  • 如果secure_link指令從URI參數(shù)中提取的signature值與secure_link_md5指令計(jì)算出的MD5值不匹配,則將$secure_link設(shè)置為空字符串;
  • 如果匹配,就校驗(yàn)鏈接的有效期,如果已過(guò)期則將$secure_link設(shè)置為"0",否則設(shè)置為"1"。

URI中的signature值可以通過(guò)以下方式獲?。?/p>

1)Ubuntu命令行執(zhí)行

 echo -n '1685003128/img2/test.jfif secret' | \
     openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =

2)Java代碼

引入Apache的commons-codec包

 <dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
 </dependency>
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.codec.digest.DigestUtils;
 public class MD5 {
     public static void main(String[] args) {
         Base64.encodeBase64URLSafeString(DigestUtils.md5("1685003128/img2/test.jfif secret"));
     }
 }

secure_link_secret校驗(yàn)?zāi)J?/h2>

配置示例:

Nginx代理服務(wù)器:192.168.110.101

 server {
         listen       80;
         server_name  localhost;
         location /img {
             default_type text/html;
             secure_link_secret test;
             if ($secure_link = ""){
                 return 403 "<p>You don't have permission to access the URL on this server.</p>";
             }
             rewrite ^ /secure$secure_link;
         }
         location /secure {
             proxy_pass http://192.168.110.100/img/;
         }
 }

服務(wù)端:192.168.110.100

location /img {
	default_type image/jpeg;
	root   /home/stone;
}

1)訪問(wèn)

http://192.168.110.101/img/test.jfif,不滿足鏈接規(guī)則,403禁止訪問(wèn)。

2)訪問(wèn)

http://192.168.110.101/img/f5b20551b8d06384734de574dd7930ce/test.jfif,滿足鏈接規(guī)則。

secure_link+secure_link_md5

配置示例:

Nginx代理服務(wù)器:192.168.110.101

location /img2 {
	default_type text/html;
	secure_link $arg_signature,$arg_expires;
	secure_link_md5 "$secure_link_expires$uri secret";
	if ($secure_link = ""){
		return 403 "<h1>Forbidden</h1><p>You don't have permission to access the URL on this server.</p>";
	}
	if ($secure_link = "0"){
		return 403 "<h1>Expired</h1><p>You don't have permission to access the URL on this server.</p>";
	}
	proxy_pass http://192.168.110.100/img/;
}

服務(wù)端:192.168.110.100

location /img {
	default_type image/jpeg;
	root   /home/stone;
}

1)訪問(wèn)

http://192.168.110.101/img/test.jfif,不滿足鏈接規(guī)則,403禁止訪問(wèn)。

2)訪問(wèn)

http://192.168.110.101/img2/test.jfif?signature=vQ5_wrXQ_oxh5c3L9bbf8g&expires=1685003128,滿足鏈接規(guī)則,且鏈接未過(guò)期。

3)訪問(wèn)

http://192.168.110.101/img2/test.jfif?signature=JY7G1brnFeEWcNShV74eNA&expires=1684398328,滿足鏈接規(guī)則,但鏈接已過(guò)期。

以上就是Nginx實(shí)現(xiàn)靜態(tài)資源防盜鏈機(jī)制的全部?jī)?nèi)容,Nginx是多模塊化的,還有很多高級(jí)功能,我們后面繼續(xù)探索。

更多關(guān)于Nginx網(wǎng)站資源防盜鏈保護(hù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 教你在容器中使用nginx搭建上傳下載的文件服務(wù)器

    教你在容器中使用nginx搭建上傳下載的文件服務(wù)器

    這篇文章主要介紹了容器中使用nginx搭建支持上傳下載的文件服務(wù)器,在這需要注意為了讓nginx支持文件上傳,需要下載并運(yùn)行帶有nginx-upload-module模塊的容器,需要的朋友可以參考下
    2022-05-05
  • CentOS 7.0下nginx實(shí)現(xiàn)每天定時(shí)分割日志

    CentOS 7.0下nginx實(shí)現(xiàn)每天定時(shí)分割日志

    大家都知道Nginx產(chǎn)生的日志都是存在一個(gè)文件,隨著網(wǎng)站運(yùn)行時(shí)間越長(zhǎng),日志文件的大小也在不斷增長(zhǎng),所以這個(gè)時(shí)候就需要實(shí)現(xiàn)定時(shí)分割,這篇文章主要介紹了在CentOS 7.0下nginx實(shí)現(xiàn)每天定時(shí)分割日志的相關(guān)資料,需要的朋友可以參考下。
    2017-04-04
  • Nginx本地配置SSL訪問(wèn)的實(shí)例教程

    Nginx本地配置SSL訪問(wèn)的實(shí)例教程

    當(dāng)一個(gè)項(xiàng)目部署測(cè)試服后會(huì)遇到跨域、SSL證書(shū)、訪問(wèn)靜態(tài)文件等各種問(wèn)題,這個(gè)時(shí)候我們就可以采用Nginx來(lái)解決上述的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Nginx本地配置SSL訪問(wèn)的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Nginx之location匹配和Rewrite重寫(xiě)跳轉(zhuǎn)方式

    Nginx之location匹配和Rewrite重寫(xiě)跳轉(zhuǎn)方式

    這篇文章主要介紹了Nginx之location匹配和Rewrite重寫(xiě)跳轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Nginx配置location匹配順序詳細(xì)總結(jié)

    Nginx配置location匹配順序詳細(xì)總結(jié)

    這篇文章主要介紹了Nginx配置location匹配順序詳解,Nginx是十分輕量級(jí)的HTTP服務(wù)器,Nginx憑借其穩(wěn)定性、低資源消耗、簡(jiǎn)單配置和豐富的功能,從十多年前名不見(jiàn)經(jīng)傳的Web服務(wù)器軟件,發(fā)展到如今能夠跟Apache匹敵的地位,需要的朋友可以參考下
    2023-08-08
  • Nginx如何安裝配置Lua支持

    Nginx如何安裝配置Lua支持

    這篇文章主要介紹了Nginx如何安裝配置Lua支持方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Linux下Nginx安裝教程

    Linux下Nginx安裝教程

    這篇文章主要為大家詳細(xì)介紹了Linux中Nginx的安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 詳解nginx rewrite和根據(jù)url參數(shù)location

    詳解nginx rewrite和根據(jù)url參數(shù)location

    本篇文章主要是介紹了nginx rewrite和根據(jù)url參數(shù)location,有興趣的同學(xué)可以了解以下。
    2016-11-11
  • nginx如何限制訪問(wèn)某些url

    nginx如何限制訪問(wèn)某些url

    這篇文章主要關(guān)于介紹了nginx如何限制訪問(wèn)某些url的相關(guān)資料,nginx是非常出色web服務(wù)器,對(duì)于靜態(tài)文件的處理非常高效,同時(shí)它的代理轉(zhuǎn)發(fā)功能和其它后臺(tái)服務(wù)器搭配起來(lái)也非常的簡(jiǎn)單高效,需要的朋友可以參考下
    2023-08-08
  • nginx+php的新基礎(chǔ)鏡像制作全過(guò)程

    nginx+php的新基礎(chǔ)鏡像制作全過(guò)程

    這篇文章主要介紹了基于alpine基礎(chǔ)鏡像,構(gòu)建含nginx、php服務(wù)的新基礎(chǔ)鏡像的過(guò)程,文中通過(guò)代碼示例和圖文結(jié)合的方式介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-03-03

最新評(píng)論