国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Nginx34】Nginx學(xué)習(xí):安全鏈接、范圍分片以及請求分流模塊

這篇具有很好參考價值的文章主要介紹了【Nginx34】Nginx學(xué)習(xí):安全鏈接、范圍分片以及請求分流模塊。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

Nginx學(xué)習(xí):安全鏈接、范圍分片以及請求分流模塊

又迎來新的模塊了,今天的內(nèi)容不多,但我們都進(jìn)行了詳細(xì)的測試,所以可能看起來會多一點(diǎn)哦。這三個模塊之前也從來都沒用過,但是通過學(xué)習(xí)之后發(fā)現(xiàn),貌似還都挺有用。當(dāng)然,還是要根據(jù)具體業(yè)務(wù)情況來看,如果你的業(yè)務(wù)中有用到,那么就可以嘗試一下哦。

安全鏈接是實(shí)現(xiàn)請求 URL 的驗證模塊,通過簽名密鑰來判斷請求是否可以返回相應(yīng)的數(shù)據(jù)。范圍分片一般用于分段下載,主要用于代理時請求后端的 Range 頭的設(shè)置。最后的請求分流不太好說清楚,咱們到文章中詳細(xì)再說明吧。

今天的內(nèi)容大部分可以在 http、server、location 下配置,僅有兩個只能在 http 或 location 下配置,我會單獨(dú)說。

安全鏈接

安全鏈接模塊 ngx_http_secure_link_module(0.7.18),可以用于檢查請求鏈接的真實(shí)性,保護(hù)資源免受未經(jīng)授權(quán)的訪問,并限制鏈接壽命。

請求鏈接的真實(shí)性通過將請求中傳遞的校驗和值與為請求計算的值進(jìn)行比較來驗證。這個其實(shí)就像我們做 App 接口時,一般都會加個 sign 簽名一樣,客戶端使用和服務(wù)端相同的方式進(jìn)行簽名,用于驗證客戶端發(fā)來的請求是否有效。另外,這個模塊還可以根據(jù)鏈接的生命周期來進(jìn)行驗證,如果生命周期有限且時間已過,則認(rèn)為該鏈接已過期。這些檢查的狀態(tài)在 $secure_link 變量中可用。

該模塊提供了兩種可選的操作模式。第一種模式由secure_link_secret 指令啟用,用于檢查請求鏈接的真實(shí)性以及保護(hù)資源免受未經(jīng)授權(quán)的訪問。第二種模式 (0.8.50) 由secure_link 和secure_link_md5 指令啟用,也用于限制鏈接的生命周期。這兩種形式我們后面都會進(jìn)行測試。

它不包含在 Nginx 核心源碼中,需要通過 --with-http_secure_link_module 編譯安裝。我們還是先來看看這個模塊所包含的配置項,然后再進(jìn)行綜合的測試。

secure_link

定義一個帶有變量的字符串,將從中提取鏈接的校驗和值(md5+base64)和生命周期。

secure_link?expression;

表達(dá)式中使用的變量通常與請求相關(guān)聯(lián),一般可以設(shè)置為 $arg_md5 ,這個變量名是可以自己起的,目的就是獲取到這個加密值。將從字符串中提取的校驗和值與 secure_link_md5 指令定義的表達(dá)式的 MD5 哈希值進(jìn)行比較。如果校驗和不同,則 $secure_link 變量設(shè)置為空字符串。如果校驗和相同,則檢查鏈路壽命。

如果鏈接的生命周期有限且時間已過,則 $secure_link 變量設(shè)置為“0”。否則,設(shè)置為“1”。請求中傳遞的 MD5 哈希值以 base64url 編碼。如果鏈接的生命周期有限,則過期時間設(shè)置為自 Epoch(1970 年 1 月 1 日星期四 00:00:00 GMT)以來的秒數(shù)。

該值在 MD5 哈希后的表達(dá)式中指定,并以逗號分隔,比如 $arg_sign、$arg_expires ,后面這個 expires 就是可以通過 GET 獲取的過期時間值。請求中傳遞的過期時間可通過 $secure_link_expires 變量在secure_link_md5 指令中使用,不使用也行,后面測試時我們會看到。如果未指定過期時間,則鏈接具有無限的生命周期。

secure_link_md5

定義一個表達(dá)式,將計算 MD5 哈希值并將其與請求中傳遞的值進(jìn)行比較。

secure_link_md5?expression;

表達(dá)式應(yīng)包含鏈接(資源)的安全部分和秘密成分。如果鏈接的生命周期有限,則表達(dá)式還應(yīng)包含 $secure_link_expires 。為了防止未經(jīng)授權(quán)的訪問,表達(dá)式可能包含有關(guān)客戶端的一些信息,例如其地址和瀏覽器版本。

比如我們可以指定為 secure_link_md5 '$uri zzyy'; ,那么上面 secure_link 第一個設(shè)置的值就是 base64_encode(md5('請求的鏈接地址 zzyy')) 這樣的結(jié)果就可以和 secure_link_md5 的值匹配上。如果不匹配,$secure_link 會是空,如果使用了過期時間,并且時間確實(shí)過期了,那么就是 0 ,這時就可以使用 if 指令判斷是否驗證成功做出不同的操作。

看不懂是吧?沒事,一會測試?yán)舆\(yùn)行一下就明白了。

secure_link_secret

定義用于檢查所請求鏈接的真實(shí)性的秘鑰。

secure_link_secret word;

僅能在 location 下配置。請求鏈接的完整 URI 如下所示:

/prefix/hash/link

其中 hash 是 MD5 散列的十六進(jìn)制表示,用于連接鏈接和秘鑰,prefix 是不帶斜杠的任意字符串。如果請求的鏈接通過了真實(shí)性檢查,則 $secure_link 變量設(shè)置為從請求 URI 中提取的鏈接。否則,$secure_link 變量設(shè)置為空字符串。

這個又是啥玩意?注意,它是單獨(dú)使用的,和上面那兩個沒關(guān)系。假如我們設(shè)置 secure_link_secret zyblog; 請求地址為 /p/17ceb6c14933609f0ab68e37fe633b1a/1.html ,那么中間加密的部分其實(shí)就是 md5('1.htmlzyblog') 。前面的 /p/ 是沒啥用的,因為這個配置只能在 location 下配置,所以這個前綴就是 location 的 URI 部分。

使用上面的鏈接可以將 $secure_link 設(shè)置為 1.html ,然后我們就可以通過 rewrite 去請求真實(shí)的 1.html 了,這里可以加個判斷,如果 $secure_link 為空,就返回異常頁面,這樣就實(shí)現(xiàn)了鏈接的驗證。

嗯,說不明白,還是一會看測試效果吧。

變量

  • $secure_link 鏈接檢查的狀態(tài)。具體值取決于所選的操作模式

  • $secure_link_expires 請求中傳遞的鏈接的生命周期,僅用于 secure_link_md5 指令

安全鏈接測試(一)secure_link 與 secure_link_md5

好了,看完了配置指令,咱們就來看看怎么使用。首先看第一種方式,就是 secure_link 與 secure_link_md5 組合的方式。先添加以下的測試代碼。

log_format securelink 'secure_link_expires=$secure_link_expires, secure_link=$secure_link';

server{
  listen 8034;

  location /securelink1/ {
    access_log logs/34.securelink.log securelink;
    alias html/;

    secure_link $arg_md5,$arg_expires;
    secure_link_md5 "$secure_link_expires$uri$remote_addr zyblog secret";

    if ($secure_link = "") {
      return 200 nosecure;
    }
    if ($secure_link = "0") {
      return 200 timeexpire;
    }
  }

}

上面的日志記錄,是為了看兩個變量的變化情況。然后我們指定 secure_link 的值,分別是從 GET 獲取到的 md5 參數(shù)和 expires 參數(shù)。expires 可以給個時間戳,我們給的是明天的一個時間點(diǎn)。secure_link_md5 我們設(shè)置的內(nèi)容是通過 "過期時間+請求鏈接URI+IP地址+空格+zyblog+空格+secret" 這一個字符串進(jìn)行加密的。

然后就是使用兩個 if 指令進(jìn)行判斷,如果 secure_link 為空,表示安全驗證沒通過,如果 $secure_link 是 0 ,表示過期了,分別通過 return 返回不同的內(nèi)容。

然后咱們先測試一下啥參數(shù)都不帶的。

???~?curl?'http://192.168.56.88:8034/securelink1/'
nosecure

直接返回 nosecure 。再看下日志。

//?34.securelink.log
secure_link_expires=-,?secure_link=-

兩個變量都是空的。然后我們準(zhǔn)備一下要加密的簽名數(shù)據(jù),根據(jù) secure_link_md5 的設(shè)置,我們可以直接通過 Linux 的 openssl 工具進(jìn)行加密,如果沒有安裝這個的話可以自己安裝一下哦,或者使用 PHP 以及其它動態(tài)語言也是可以的,就是md5 之后再 base64 一下。

[root@localhost?article.http.d]#?echo?-n?'1663719873/securelink1/192.168.56.1?zyblog?secret'?|?openssl?md5?-binary?|?openssl?base64?|?tr?+/?-_?|?tr?-d?=
VEJ41JfqBbXXaGJRXWK3rw

1663719873 是我們一會要通過 expires 參數(shù)傳過來的過期時間,現(xiàn)在用當(dāng)前時間,后面我們才會測試過期的問題,在 secure_link 配置中逗號后面第二個參數(shù)我們放置的就是它,然后它就會到 $secure_link_expires 變量中。secure_link_md5 中第一個變量就是它,所以我們要拼接在最前面,然后是請求的地址,這里就是請求根目錄,URI 就是 /securelink1/ ,然后就是客戶端 IP 地址,我這里是 192.168.56.1,最后接上空格和固定的字符串,加密后的結(jié)果就是 VEJ41JfqBbXXaGJRXWK3rw 。然后發(fā)送請求時使用 GET 帶上這兩個參數(shù)吧。

curl?'http://192.168.56.88:8034/securelink1/?md5=VEJ41JfqBbXXaGJRXWK3rw&expires=1663719873'

是不是發(fā)現(xiàn)可以打開首頁了?因為我們做了 alias ,所以就是直接打開 html 目錄下的首頁了。再看下日志。

//?34.securelink.log
secure_link_expires=1663719873,?secure_link=1

兩個值都取到了,secure_link 的值是 1 ,不符合 if 每個人的中的內(nèi)容,不會直接 return 返回,正常向下執(zhí)行。

secure_link_expires=1662769473,?secure_link=1

接下來試試過期問題,先改造一下。

secure_link?$arg_md5,1662769473;
secure_link_md5?"$uri$remote_addr?zyblog?secret";

這回我們讓過期時間的設(shè)置不使用傳遞過來的參數(shù)了,而是一個固定值,這個值是比現(xiàn)在的時間稍微早一點(diǎn)的時間。然后 secure_link_md5 也改了下,不使用 secure_link_expires。

???~?curl?'http://192.168.56.88:8034/securelink1/?md5=EzLUxfpwyLdp7bDv0m0l0Q'
timeexpire

查看日志,secure_link 被設(shè)置成了 0 ,而 secure_link_expires 則是我們 secure_link 中設(shè)置的那個值。

//?34.securelink.log
secure_link_expires=1662769473,?secure_link=0

然后我們再將過期時間設(shè)置為比現(xiàn)在晚一點(diǎn)的時候,比如比當(dāng)前時間多個幾分鐘。

secure_link?$arg_md5,1663644527;

現(xiàn)在訪問又正常了,從這里可以看出,過期時間是基于當(dāng)前系統(tǒng)的時間值的,如果小于當(dāng)前系統(tǒng)時間,就是過期的,如果大于當(dāng)前系統(tǒng)時間,就是正常的。而如果將 $secure_link_expires 加入到 secure_link_md5 中一起加密的話,則是保證這個請求必須在 1 秒內(nèi)到達(dá)。假設(shè)有代理或者黑客大佬中間攔截了請求,就會導(dǎo)致時間過期,而如果時間參數(shù)對不上加密內(nèi)容,則會導(dǎo)致驗證不通過。這里和我們之前講過的接口簽名 sign 是一樣的概念。

時間參數(shù)最重要的作用,就是讓簽名產(chǎn)生變化,如果沒有這個動態(tài)值,那么簽名就會一直是一樣的,這種簽名有跟沒有不就沒啥區(qū)別了。

不過就像做接口簽名一樣,客戶端和服務(wù)端如果時間不一致,就可能導(dǎo)致簽名失敗。一般有兩種解決方式,一是對發(fā)來的時間參數(shù)判斷,比如1分鐘或幾分鐘內(nèi)的都有效,二是每次接口請求都返回服務(wù)器的時間,讓客戶端保存一份,并以這個時間戳為基準(zhǔn)進(jìn)行計時。通常來說,第一種方式是我們用動態(tài)語言時常用的方式,第二種則可以應(yīng)用在 Nginx 這個配置中。

對于接口簽名不太了解的同學(xué),可以查閱下相關(guān)的資料哦。一般都是通過 URI+請求參數(shù)排序+時間戳 這種加密形式進(jìn)行接口簽名的。

當(dāng)然,我們也可以不使用過期時間,secure_link 不加過期時間參數(shù)就可以了。

secure_link $arg_md5;
secure_link_md5 "$uri$remote_addr zyblog secret";

然后對參數(shù)進(jìn)行加密。

[root@localhost?article.http.d]#?echo?-n?'/securelink1/192.168.56.1?zyblog?secret'?|?openssl?md5?-binary?|?openssl?base64?|?tr?+/?-_?|?tr?-d?=
EzLUxfpwyLdp7bDv0m0l0Q

直接訪問,可以正確獲得訪問結(jié)果。

curl?'http://192.168.56.88:8034/securelink1/?md5=EzLUxfpwyLdp7bDv0m0l0Q'

日志的內(nèi)容如下。

secure_link_expires=-,?secure_link=1

安全鏈接測試(二)secure_link_secret

第二種,secure_link_secret 的使用方法,還是先來準(zhǔn)備測試代碼吧。

location /securelink2/ {
  access_log logs/34.securelink.log securelink;
  alias html/;
  
  secure_link_secret zyblog.com.cn;
  if ($secure_link = "") {
    return 200 nosecure;
  }

  rewrite ^ /$secure_link;
}
location / {
  root html;
}

這段代碼中,我們指定簽名的 Key 是 zyblog.com.cn 。如果匹配不成功,就返回 nosecure 的內(nèi)容,如果成功了,$secure_link 會變成簽名內(nèi)容之后的 URI 地址。也就是上面配置解釋中 link 的部分。接著就通過 rewrite 重寫到 link 地址。

先來看看直接訪問的效果。

curl?'http://192.168.56.88:8034/securelink2/aaa'
nosecure

不出意外的返回 nosecure ,因為我們的驗證沒有通過,$secure_link 的值是空的,先做一個加密密鑰過來吧,根據(jù)規(guī)則,直接拼接 aaa 和 zyblog.com.cn ,然后 md5 就可以了,這里不需要再 base64 了。

[root@localhost?article.http.d]#?echo?-n?'aaazyblog.com.cn'?|?openssl?md5?-hex
(stdin)=?e09475846aa906796ef997b684eced07

獲得密鑰之后,加到 location 和 aaa 中間。

curl?'http://192.168.56.88:8034/securelink2/e09475846aa906796ef997b684eced07/aaa'

是不是可以正常訪問啦,看看日志內(nèi)容。

//?34.securelink.log
secure_link_expires=-,?secure_link=aaa

secure_link 確實(shí)變成了密碼后面的 URI 內(nèi)容了。對于指定的文件也需要加密。

[root@localhost?article.http.d]#?echo?-n?'tf2/2.htmlzyblog.com.cn'?|?openssl?md5?-hex
(stdin)=?2fef203746d3684862e8d2607bfebc86

現(xiàn)在需要訪問的是 tf2 目錄下的 2.html 文件。

curl?'http://192.168.56.88:8034/securelink2/2fef203746d3684862e8d2607bfebc86/tf2/2.html'

也是可以正常訪問的。這里需要注意的是,它僅能對非根的的路徑進(jìn)行安全連接保護(hù)。比如下面這樣就不行。

curl?'http://192.168.56.88:8034/securelink2/xxxx/'

即使你是 "zyblog.com.cn" 或 “/zyblog.com.cn” 這樣加密都不行,但要想直接訪問可以直接指定文件名。

[root@localhost?article.http.d]#?echo?-n?'index.htmlzyblog.com.cn'?|?openssl?md5?-hex
(stdin)=?2a19ca1a01c0121c7bb6b4ecb8d109dc

這樣就可以訪問根目錄下的 index.html 了。

curl?'http://192.168.56.88:8034/securelink2/2a19ca1a01c0121c7bb6b4ecb8d109dc/index.html'

范圍分片

這里的范圍分片,其實(shí)就是范圍請求的意思,也就是 HTTP 中的那個 Range 請求頭和響應(yīng)頭的作用。不過這里的配置不是針對客戶端的,而是針對代理服務(wù)器的。它的命名是 ngx_http_slice_module 模塊(1.9.8),是一個過濾器,用于將請求拆分為子請求,每個子請求返回一定范圍的響應(yīng)。過濾器提供更有效的大響應(yīng)緩存。

它只有一個配置指令,并且不是包含在 Nginx 核心源碼中的,需要通過 --with-http_slice_module 編譯。

slice

設(shè)置切片的大小。

slice?size;

默認(rèn) 0 表示禁用將響應(yīng)拆分為切片。請注意,過低的值可能會導(dǎo)致內(nèi)存使用過多并打開大量文件。

為了讓子請求返回所需的范圍,應(yīng)將 $slice_range 變量作為 Range 請求標(biāo)頭字段傳遞給代理服務(wù)器。如果啟用了緩存,則應(yīng)將 $slice_range 添加到緩存鍵中,并應(yīng)啟用具有 206 狀態(tài)代碼的響應(yīng)的緩存。

變量

  • $slice_range HTTP字節(jié)范圍格式的當(dāng)前切片范圍,例如bytes=0-1048575。

范圍分片測試

這個測試需要借助反向代理,因為它主要是針對代理的子請求的嘛。所以我們添加如下配置。

# http
proxy_cache_path slicecache levels=1:2 keys_zone=slicecache:10m;

server{
  ………………
  location ~ /slice(.*) {
    slice             100;
    proxy_cache       slicecache;
    proxy_cache_key   $uri$is_args$args$slice_range;
    proxy_set_header  Range $slice_range;
    proxy_cache_valid 200 206 10m;
    proxy_pass        http://127.0.0.1/$1?$args;
  }
}

代理相關(guān)的配置就不多說了,主要就是做了個代理緩存。然后添加了 slice 指令,設(shè)置為 100 個字符。然后需要設(shè)置代理請求頭的 Range 頭,值直接就放 $slice_range 就好了。另外就是有效緩存響應(yīng)碼要把 206 加上。這些配置都是我們之前在學(xué)習(xí)代理時講過的。

然后準(zhǔn)備一個 PHP 文件,沒什么特別的內(nèi)容,就是獲取 Range 請求頭的內(nèi)容,然后返回響應(yīng)時響應(yīng)為 206 狀態(tài)碼,并且添加 Content-Range 響應(yīng)頭。最后循環(huán)隨機(jī)輸出數(shù)據(jù)。

//?vim?/usr/local/nginx/html/fastcgi1/slice/1.php
if?(isset?(?$_SERVER?['HTTP_RANGE']?))?{
??if?(preg_match?(?'/bytes=\h*(\d+)-(\d*)[\D.*]?/i',?$_SERVER?['HTTP_RANGE'],?$matches?))?{
????$begin?=?intval?(?$matches?[1]?);

????if?(!?empty?(?$matches?[2]?))?{
??????$end?=?intval?(?$matches?[2]?);
????}
??}
}

header?(?'HTTP/1.1?206?Partial?Content'?);

header?(?"Content-Range:?bytes?$begin-$end/10000"?);
foreach(range(0,?99)?as?$v){
??echo?rand(1,?9);
}

請求之后,我們?nèi)タ?Proxy 緩存目錄,會發(fā)現(xiàn)生成了很多緩存。這就是因為我們每次都只是請求 100 字節(jié)范圍內(nèi)的數(shù)據(jù),所以每次請求的響應(yīng)就只有 100 字節(jié),總共會響應(yīng) 1000 個字節(jié),大概有 10 次子請求。這里只有 8 個目錄,但是還有二級目錄,總共生成的緩存文件應(yīng)該是 10 個。

[root@localhost?article.http.d]#?ll?/usr/local/nginx/slicecache/
total?0
drwx------?3?www?www?16?Sep?20?09:58?0
drwx------?3?www?www?16?Sep?20?09:58?1
drwx------?4?www?www?26?Sep?20?09:58?3
drwx------?3?www?www?16?Sep?20?09:58?4
drwx------?3?www?www?16?Sep?20?09:58?5
drwx------?3?www?www?16?Sep?20?09:58?a
drwx------?4?www?www?26?Sep?20?09:58?c
drwx------?3?www?www?16?Sep?20?09:58?f

隨便查看一個目錄下面的緩存文件,內(nèi)容就是 100 個字符。

[root@localhost?article.http.d]#?cat?/usr/local/nginx/slicecache/3/25/2c87b23befe050b716282f3280b5c253
??)c????????-)c
??R
KEY:?/slice/fastcgi1/slice/1.phpbytes=800-899
HTTP/1.1?206?Partial?Content
Server:?nginx/1.23.0
Date:?Tue,?20?Sep?2022?01:58:05?GMT
Content-Type:?text/html;?charset=UTF-8
Connection:?close
X-Powered-By:?PHP/7.2.24
Content-Range:?bytes?800-899/1000

2687293144586783221846674348597775216172183988478888753581981981732616122451579567834463585161967919

這 100 個字符在最終整體返回的數(shù)據(jù)中肯定是存在的,是整體響應(yīng)內(nèi)容的連續(xù)一部分。

【Nginx34】Nginx學(xué)習(xí):安全鏈接、范圍分片以及請求分流模塊,nginx,學(xué)習(xí),安全,網(wǎng)絡(luò),運(yùn)維

請求分流

最后我們再來看到的是請求分流的功能。它還是比較有意思的,能夠根據(jù)一個變量內(nèi)容,進(jìn)行 Hash 分配到指定的內(nèi)容,有點(diǎn)類似于之前學(xué)習(xí)過的 Redis 的分槽的效果。這個模塊的全名是 ngx_http_split_clients_module 模塊,用于創(chuàng)建適用于 A/B 測試的變量,也稱為拆分測試。它直接包含在 Nginx 核心源碼中,直接就可以使用,也只有一個配置指令。

split_clients

為 A/B 測試創(chuàng)建一個變量。

split_clients?string?$variable?{?...?}

只能在 http 模塊下進(jìn)行配置。使用 MurmurHash2 對原始字符串的值進(jìn)行散列。和 Redis Cluster 中的 槽solt 類似,從 0 到 4294967295 的范圍內(nèi),根據(jù)配置的結(jié)果,會讓散列值落在一定的范圍內(nèi)。后面我們看例子再詳細(xì)說明。

請求分流測試

上面的內(nèi)容要是沒看懂,我們就直接測試效果。

# http
split_clients "${arg_a}zyblog" $variant {
  50%               aaa.html;
  20%               a.txt;
  *                 index.html;
}

server {
  # ………………
  location /splitclient/ {
    alias html/;
    index $variant;
  }
}

在 split_clients 配置中,我們定義了 $arg_a 拼接 zyblog 字符串做為 Hash 值,也就說,根據(jù)我們傳遞過來的 GET 參數(shù) a 的不同,就會有不同的哈希結(jié)果。上面配置的意思是,50% 代表散列結(jié)果為 0-2147483647 范圍內(nèi)的結(jié)果,就設(shè)置 $variant 為 aaa.html ;20% 代表散列值在 2147483648-3006477107 范圍內(nèi)的結(jié)果,$variant 為 a.txt ;剩下如果落在 3006477108 - 4294967295 范圍內(nèi),則將變量的值設(shè)置為 index.html 。

這一塊真的和 Redis Cluster 中相關(guān)的概念非常類似,如果不記得了,可以回到 Redis進(jìn)階:分布式部署RedisCluster(一) 這篇文章中,看一下 槽Slot 相關(guān)的說明。接下來就是測試了,不停地修改 a 參數(shù)的值就可以看到效果啦。

???~?curl?'http://192.168.56.88:8034//splitclient/'
111222333444

<h1>aaa</h1>

???~?curl?'http://192.168.56.88:8034//splitclient/?a=1'
this?is?a.txt.?111

???~?curl?'http://192.168.56.88:8034//splitclient/?a=2'
111222333444

<h1>aaa</h1>

???~?curl?'http://192.168.56.88:8034//splitclient/?a=3'
this?is?a.txt.?111

???~?curl?'http://192.168.56.88:8034//splitclient/?a=4'
<!DOCTYPE?html>
<html>
<head>
<title>Welcome?to?nginx!</title>
<style>
html?{?color-scheme:?light?dark;?}
body?{?width:?35em;?margin:?0?auto;
font-family:?Tahoma,?Verdana,?Arial,?sans-serif;?}
</style>
</head>
<body>
<h1>Welcome?to?nginx!123123</h1>
<p>If?you?see?this?page,?the?nginx?web?server?is?successfully?installed?and
working.?Further?configuration?is?required.</p>

<p>For?online?documentation?and?support?please?refer?to
<a?>nginx.org</a>.<br/>
Commercial?support?is?available?at
<a?>nginx.com</a>.</p>

<p><em>Thank?you?for?using?nginx.</em></p>
</body>
</html>

總結(jié)

安全鏈接這個,是不是感覺有點(diǎn)意思啊,雖說大部分情況下我們會在動態(tài)語言中做接口簽名,但靜態(tài)資源有需要的時候完全也可以通過 Nginx 來實(shí)現(xiàn)嘛。這樣不管動態(tài)還是靜態(tài)資源,都是有請求限制的啦。

范圍分片可能我們平常用得不多,大多數(shù)情況下可能是對一些下載文件做斷點(diǎn)續(xù)傳時會用到。

請求分流這個,其實(shí)可以實(shí)現(xiàn)更多的功能。因為我們可以設(shè)置變量,就可以將這個變量應(yīng)用到 location、if、rewrite 等等各種配置中去,甚至分開記錄日志都可以。非常強(qiáng)大,也非常靈活,期待各路高手大佬的開發(fā)咯,有好的案例也歡迎留言分享哦。

參考文檔:

http://nginx.org/en/docs/http/ngx_http_secure_link_module.html

http://nginx.org/en/docs/http/ngx_http_slice_module.html

http://nginx.org/en/docs/http/ngx_http_split_clients_module.html文章來源地址http://www.zghlxwxcb.cn/news/detail-722582.html

到了這里,關(guān)于【Nginx34】Nginx學(xué)習(xí):安全鏈接、范圍分片以及請求分流模塊的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【8.0.34-0 ubuntu 安裝Mysql 后無法鏈接是什么情況】

    如果檢查一下帳號密碼沒問題看一下日志: 很顯然是mysql 采用的密碼插件出了問題:你采用了mysql廢棄的密碼驗證方式: Plugin mysql_native_password reported: ‘mysql_native_password’ is deprecated and will be removed in a future release. Please use caching_sha2_password instead 這時候你可以通過SQL來更新認(rèn)證

    2024年02月04日
    瀏覽(19)
  • 劍指offer12 矩陣中的路徑 13 機(jī)器人的運(yùn)動范圍 34.二叉樹中和為某一值得路徑

    劍指offer12 矩陣中的路徑 13 機(jī)器人的運(yùn)動范圍 34.二叉樹中和為某一值得路徑

    //寫的有點(diǎn)問題,暫時想不到怎么改,先放著,通過用例71/83 卡住的是abcd 但是改了又有問題 無語 看了 答案 都寫不對 在類成員里面定義了row和col 就不要重復(fù)定義了 不然不知道為什么就開始發(fā)瘋 先貼出蠢貨寫出來的東西 審題也審不明白 機(jī)器人只能上下左右走 不能一行一行

    2024年02月15日
    瀏覽(25)
  • 34.SpringMVC獲取請求參數(shù)

    將 HttpServletRequest 作為 控制器方法的形參 ,此時HttpServletRequest類型的參數(shù)表示 封裝了當(dāng)前請求 的請求報文的對象 index.html TestParamController.java 成功獲取到表單提交的信息,這是采用原生Servlet的方式獲取 在控制器方法的形參位置, 設(shè)置和請求參數(shù)同名的形參 ,當(dāng)瀏覽器發(fā)送

    2024年02月12日
    瀏覽(34)
  • API安全——SSRF服務(wù)端請求偽造的原理以及防范

    SSRF全稱Server-Side Request Forgery,服務(wù)端請求偽造。 在最新的2023 OWASP中API 安全的Top10榜單中,ssrf排第7。 我們在開發(fā)過程中,通常使用API 獲取遠(yuǎn)程時出現(xiàn)服務(wù)器端請求偽造 (SSRF) 缺陷 資源,而不驗證用戶提供的 URL。它使攻擊者能夠 強(qiáng)制應(yīng)用程序?qū)⒕木幹频恼埱蟀l(fā)送到意外

    2024年02月12日
    瀏覽(25)
  • 網(wǎng)絡(luò)安全--linux下Nginx安裝以及docker驗證標(biāo)簽漏洞

    網(wǎng)絡(luò)安全--linux下Nginx安裝以及docker驗證標(biāo)簽漏洞

    目錄 一、Nginx安裝 ?二、docker驗證標(biāo)簽漏洞 1.首先創(chuàng)建 Nginx 的目錄并進(jìn)入: 2.下載 Nginx 的安裝包,可以通過 FTP 工具上傳離線環(huán)境包,也可通過 wget 命令在線獲取安裝包: 沒有 wget 命令的可通過 yum 命令安裝: 3.解壓 Nginx 的壓縮包: 4.下載并安裝 Nginx 所需的依賴庫和包:

    2024年02月11日
    瀏覽(22)
  • Office E5 OneDrive API使用指南:注冊+密鑰獲取+獲取臨時上傳鏈接+分片

    Office E5 OneDrive API使用指南:注冊+密鑰獲取+獲取臨時上傳鏈接+分片

    異想之旅:本人原創(chuàng)博客完全手敲,絕對非搬運(yùn),全網(wǎng)不可能有重復(fù);本人無團(tuán)隊,僅為技術(shù)愛好者進(jìn)行分享,所有內(nèi)容不牽扯廣告。本人所有文章僅在CSDN、掘金和個人博客(一定是異想之旅域名)發(fā)布,除此之外全部是盜文! 本文主要講解的是自己注冊了一個 E5 開發(fā)者賬

    2024年02月04日
    瀏覽(28)
  • springboot第34集:ES 搜索,nginx

    springboot第34集:ES 搜索,nginx

    全文檢索完全匹配,必須包含分詞后的所有詞 image.png image.png image.png image.png image.png https://www.elastic.co/cn/downloads/elasticsearch image.png 1) 前臺啟動: bin/elasticsearch 2) 后臺啟動: bin/elasticsearch -d 1) 前臺停止: ctrl+c (2) 后臺停止: kill -9 elasticsearch的進(jìn)程號 創(chuàng)建用戶命令 修改用戶密碼

    2024年02月14日
    瀏覽(7)
  • 34.Netty源碼之Netty如何處理網(wǎng)絡(luò)請求

    34.Netty源碼之Netty如何處理網(wǎng)絡(luò)請求

    通過前面兩節(jié)源碼課程的學(xué)習(xí),我們知道 Netty 在服務(wù)端啟動時會為創(chuàng)建 NioServerSocketChannel,當(dāng)客戶端新連接接入時又會創(chuàng)建 NioSocketChannel,不管是服務(wù)端還是客戶端 Channel,在創(chuàng)建時都會初始化自己的 ChannelPipeline。 如果把 Netty 比作成一個生產(chǎn)車間,那么 Reactor 線程無疑是車間

    2024年02月11日
    瀏覽(22)
  • 【深度學(xué)習(xí)&NLP】基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)實(shí)現(xiàn)中文文本情感分析(分類)附代碼以及數(shù)據(jù)集鏈接

    【深度學(xué)習(xí)&NLP】基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)實(shí)現(xiàn)中文文本情感分析(分類)附代碼以及數(shù)據(jù)集鏈接

    【注】:本文所述的實(shí)驗的完整實(shí)現(xiàn)代碼包括數(shù)據(jù)集的倉庫鏈接會在文末給出(建議讀者自行配置GPU來加速TensorFlow的相關(guān)模型,運(yùn)行起來會快非常多) 目錄 一、研究的背景和目的 二、文本數(shù)據(jù)集描述 1、數(shù)據(jù)集來源以及使用目的 2、數(shù)據(jù)規(guī)模、以及如何劃分?jǐn)?shù)據(jù)集 3、數(shù)據(jù)集的

    2024年02月04日
    瀏覽(92)
  • ES是一個分布式全文檢索框架,隱藏了復(fù)雜的處理機(jī)制,核心數(shù)據(jù)分片機(jī)制、集群發(fā)現(xiàn)、分片負(fù)載均衡請求路由

    ES是一個分布式全文檢索框架,隱藏了復(fù)雜的處理機(jī)制,核心數(shù)據(jù)分片機(jī)制、集群發(fā)現(xiàn)、分片負(fù)載均衡請求路由

    ES是一個分布式框架,隱藏了復(fù)雜的處理機(jī)制,核心數(shù)據(jù)分片機(jī)制、集群發(fā)現(xiàn)、分片負(fù)載均衡請求路由。 ES的高可用架構(gòu),總體如下圖: 說明:本文會以pdf格式持續(xù)更新,更多最新尼恩3高pdf筆記,請從下面的鏈接獲?。赫Z雀 或者 碼云 ES基本概念名詞 Cluster 代表一個集群,集

    2024年02月10日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包