nginx實(shí)現(xiàn)重寫功能和防盜鏈功能
重寫功能 rewrite
Nginx服務(wù)器利用 ngx_http_rewrite_module 模塊解析和處理rewrite請(qǐng)求,此功能依靠 PCRE(perl compatible regular expression),因此編譯之前要安裝PCRE庫(kù),rewrite是nginx服務(wù)器的重要功能之
一,用于實(shí)現(xiàn)URL的重寫,URL的重寫是非常有用的功能,比如它可以在我們改變網(wǎng)站結(jié)構(gòu)之后,不需要客戶端修改原來(lái)的書簽,也無(wú)需其他網(wǎng)站修改我們的鏈接,就可以設(shè)置為自動(dòng)訪問(wèn),另外還可以在一定程度上提高網(wǎng)站的安全性。
ngx_http_rewrite_module模塊指令
if指令
用于條件匹配判斷,并根據(jù)條件判斷結(jié)果選擇不同的Nginx配置,可以配置在server或location塊中進(jìn)行配置,Nginx的if語(yǔ)法僅能使用if做單次判斷,不支持使用if else或者if elif這樣的多重判斷,用法如下:
if (條件匹配) {
action
}
官方文檔
https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#if
實(shí)際操作 用戶訪問(wèn)的文件不存在 直接返回主頁(yè)

return
return用于完成對(duì)請(qǐng)求的處理,并直接向客戶端返回響應(yīng)狀態(tài)碼,比如:可以指定重定向URL(對(duì)于特殊重定向狀態(tài)碼,301/302等) 或者是指定提示文本內(nèi)容(對(duì)于特殊狀態(tài)碼403/500等),處于此指令后的所有配置都將不被執(zhí)行,return可以在server、if 和 location塊進(jìn)行配置
語(yǔ)法格式:
www.kgc.com/test/ 404 return code; #返回給客戶端指定的HTTP狀態(tài)碼 return code [text]; #返回給客戶端的狀態(tài)碼及響應(yīng)報(bào)文的實(shí)體內(nèi)容,可以調(diào)用變量,其中text如果有空格,需要用單或雙引號(hào) return code url; #返回給客戶端的URL地址
例子:
server {
listen 80;
server_name www.kgc.com;
root /data/nginx/pc/;
location /{
root /data/nginx/pc/;
}
location /test { #訪問(wèn)test 直接返回403
return 403; #可以改成666
}
}
set
set指令用于設(shè)置變量值。- 這些變量可以在后續(xù)的請(qǐng)求處理過(guò)程中使用。
- 例如,
set $variable_name "value";將創(chuàng)建一個(gè)名為$variable_name的變量并為其賦值"value"。
break
- 在
if指令塊內(nèi),break用于停止執(zhí)行當(dāng)前if塊中的后續(xù)指令,并繼續(xù)處理請(qǐng)求。 - 在
rewrite指令的上下文中,break指令并不常用,因?yàn)?nbsp;rewrite指令本身在每次重寫后都會(huì)終止當(dāng)前指令集的處理(除非使用了last或break標(biāo)志的rewrite指令)。
if ($slow) {
limit_rate 10k;
break;
}
location /main {
root /data/nginx/html/pc;
index index.html;
default_type text/html;
set $name kgc;
echo $name;
break; #location塊中break后面指令還會(huì)執(zhí)行
set $my_port $server_port;
echo $my_port;
}
rewrite
通過(guò)正則表達(dá)式的匹配來(lái)改變URI,可以同時(shí)存在一個(gè)或多個(gè)指令,按照順序依次對(duì)URI進(jìn)行匹配,rewrite主要是針對(duì)用戶請(qǐng)求的URL或者是URI做具體處理
rewrite可以配置在 server、location、if
rewrite可以配置在 server、location、if
語(yǔ)法格式 :
rewrite regex replacement(www.baidu.com) [flag];
正則匹配原始訪問(wèn)url 替代你想讓客戶訪問(wèn)的 標(biāo)志 ()premanent301 redirect302 break last
注意:如果在同一級(jí)配置塊中存在多個(gè)rewrite規(guī)則,那么會(huì)自上而下逐個(gè)檢查;被某條件規(guī)則替換完成后,會(huì)重新一輪的替換檢查,隱含有循環(huán)機(jī)制,但不超過(guò)10次;如果超過(guò),提示500響應(yīng)碼,[flag]所表示的標(biāo)志位用于控制此循環(huán)機(jī)制如果替換后的URL是以http://或https://開頭,則替換結(jié)果會(huì)直接以重定向返回給客戶端, 即永久重定向 301
#訪問(wèn) bj 跳轉(zhuǎn)到 beijing
location /bj {
root /data/nginx/pc;
rewrite ^/bj/(.*) /beijing/$1 permanent;
}
防盜鏈
防盜鏈基于客戶端攜帶的referer實(shí)現(xiàn),referer是記錄打開一個(gè)頁(yè)面之前記錄是從哪個(gè)頁(yè)面跳轉(zhuǎn)過(guò)來(lái)的標(biāo)記信息,如果別人只鏈接了自己網(wǎng)站圖片或某個(gè)單獨(dú)的資源,而不是打開了網(wǎng)站的整個(gè)頁(yè)面,這就是盜鏈,referer就是之前的那個(gè)網(wǎng)站域名,正常的referer信息有以下幾種:
none:#請(qǐng)求報(bào)文首部沒(méi)有referer首部,比如用戶直接在瀏覽器輸入域名訪問(wèn)web網(wǎng)站,就沒(méi)有referer信息。 blocked:#請(qǐng)求報(bào)文有referer首部,但無(wú)有效值,比如為空。 server_names:#referer首部中包含本主機(jī)名及即nginx 監(jiān)聽的server_name。 arbitrary_string:#自定義指定字符串,但可使用*作通配符。示例: *.kgc.org www.kgc.* regular expression:#被指定的正則表達(dá)式模式匹配到的字符串,要使用~開頭,例如:~.*\.kgc\.com
盜鏈
在服務(wù)器1上有一張圖片
服務(wù)器二將資源路徑設(shè)置為服務(wù)器1從而達(dá)到白嫖的目的



實(shí)現(xiàn)防盜鏈
第一胎服務(wù)器
vim /apps/nginx/conf.d/pc.conf
server{
listen 80;/
server_name www.pc.com;
root /data/nginx/pc;
location / {
root /data/nginx/pc;
}
location ~* \.(jpg|gif|swf|jpeg|bmp)$ { #匹配到j(luò)pg|gif|swf|jpeg|bmp 結(jié)尾的
root /data/nginx/pc; 根目錄
valid_referers none blocked *.pc.com pc.com; #定義白名單 允許誰(shuí)跳轉(zhuǎn)過(guò)來(lái)訪問(wèn)
if ( $invalid_referer ) { #不在名單里 返回403
return 403;
}
}
}
}
cd /data/nginx/pc/
以上就是nginx實(shí)現(xiàn)重寫功能和防盜鏈功能的詳細(xì)內(nèi)容,更多關(guān)于nginx重新和防盜鏈的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Nginx?Gunicorn?flask項(xiàng)目部署思路分析詳解
這篇文章主要為大家介紹了Nginx?Gunicorn?flask項(xiàng)目部署思路分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
使用referer指令配置Nginx服務(wù)器來(lái)防止圖片盜鏈
這篇文章主要介紹了使用referer指令配置Nginx服務(wù)器來(lái)防止圖片盜鏈的方法,文中也簡(jiǎn)單介紹了referer指令的一些語(yǔ)法和常用參數(shù),需要的朋友可以參考下2015-12-12
Nginx出現(xiàn)403?Forbidden的幾種簡(jiǎn)單解決方式
這篇文章主要介紹了Nginx出現(xiàn)403?Forbidden的幾種解決思路,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
nginx使用sticky基于cookie的會(huì)話保持方式
這篇文章主要介紹了nginx使用sticky基于cookie的會(huì)話保持方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
Nginx實(shí)現(xiàn)Nacos反向代理的項(xiàng)目實(shí)踐
在日常的web網(wǎng)站部署中,經(jīng)常會(huì)用到nginx反向代理,本文主要介紹了Nginx實(shí)現(xiàn)Nacos反向代理的項(xiàng)目實(shí)踐,Nginx實(shí)現(xiàn)Nacos反向代理的項(xiàng)目實(shí)踐2022-03-03
編寫Go程序?qū)ginx服務(wù)器進(jìn)行性能測(cè)試的方法
這篇文章主要介紹了編寫Go程序?qū)ginx服務(wù)器進(jìn)行性能測(cè)試的方法,包括對(duì)其負(fù)載均衡和緩存等方面的測(cè)試,極力推薦!需要的朋友可以參考下2015-06-06
在linux中安裝nginx及在樹莓派ubuntu中安裝nginx的方法
在進(jìn)行軟件安裝時(shí),若遇到報(bào)錯(cuò),常見的解決方法之一是檢查是否缺失依賴,并嘗試安裝所需的依賴包,記得去掉尖括號(hào),對(duì)于nginx服務(wù)器,配置文件的位置和管理是關(guān)鍵操作之一,通過(guò)命令cd進(jìn)入后,使用sudo nano index.nginx-debian.html命令打開并編輯默認(rèn)的html文件2024-11-11

