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

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



實現(xiàn)防盜鏈
第一胎服務器
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)$ { #匹配到jpg|gif|swf|jpeg|bmp 結尾的
root /data/nginx/pc; 根目錄
valid_referers none blocked *.pc.com pc.com; #定義白名單 允許誰跳轉過來訪問
if ( $invalid_referer ) { #不在名單里 返回403
return 403;
}
}
}
}
cd /data/nginx/pc/
以上就是nginx實現(xiàn)重寫功能和防盜鏈功能的詳細內容,更多關于nginx重新和防盜鏈的資料請關注腳本之家其它相關文章!
相關文章
Nginx?Gunicorn?flask項目部署思路分析詳解
這篇文章主要為大家介紹了Nginx?Gunicorn?flask項目部署思路分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
Nginx出現(xiàn)403?Forbidden的幾種簡單解決方式
這篇文章主要介紹了Nginx出現(xiàn)403?Forbidden的幾種解決思路,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
在linux中安裝nginx及在樹莓派ubuntu中安裝nginx的方法
在進行軟件安裝時,若遇到報錯,常見的解決方法之一是檢查是否缺失依賴,并嘗試安裝所需的依賴包,記得去掉尖括號,對于nginx服務器,配置文件的位置和管理是關鍵操作之一,通過命令cd進入后,使用sudo nano index.nginx-debian.html命令打開并編輯默認的html文件2024-11-11

