nginx實現重寫功能和防盜鏈功能
重寫功能 rewrite
Nginx服務器利用 ngx_http_rewrite_module 模塊解析和處理rewrite請求,此功能依靠 PCRE(perl compatible regular expression),因此編譯之前要安裝PCRE庫,rewrite是nginx服務器的重要功能之
一,用于實現URL的重寫,URL的重寫是非常有用的功能,比如它可以在我們改變網站結構之后,不需要客戶端修改原來的書簽,也無需其他網站修改我們的鏈接,就可以設置為自動訪問,另外還可以在一定程度上提高網站的安全性。
ngx_http_rewrite_module模塊指令
if指令
用于條件匹配判斷,并根據條件判斷結果選擇不同的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實現,referer是記錄打開一個頁面之前記錄是從哪個頁面跳轉過來的標記信息,如果別人只鏈接了自己網站圖片或某個單獨的資源,而不是打開了網站的整個頁面,這就是盜鏈,referer就是之前的那個網站域名,正常的referer信息有以下幾種:
none:#請求報文首部沒有referer首部,比如用戶直接在瀏覽器輸入域名訪問web網站,就沒有referer信息。 blocked:#請求報文有referer首部,但無有效值,比如為空。 server_names:#referer首部中包含本主機名及即nginx 監(jiān)聽的server_name。 arbitrary_string:#自定義指定字符串,但可使用*作通配符。示例: *.kgc.org www.kgc.* regular expression:#被指定的正則表達式模式匹配到的字符串,要使用~開頭,例如:~.*\.kgc\.com
盜鏈
在服務器1上有一張圖片
服務器二將資源路徑設置為服務器1從而達到白嫖的目的
實現防盜鏈
第一胎服務器
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實現重寫功能和防盜鏈功能的詳細內容,更多關于nginx重新和防盜鏈的資料請關注腳本之家其它相關文章!
相關文章
Nginx?Gunicorn?flask項目部署思路分析詳解
這篇文章主要為大家介紹了Nginx?Gunicorn?flask項目部署思路分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12在linux中安裝nginx及在樹莓派ubuntu中安裝nginx的方法
在進行軟件安裝時,若遇到報錯,常見的解決方法之一是檢查是否缺失依賴,并嘗試安裝所需的依賴包,記得去掉尖括號,對于nginx服務器,配置文件的位置和管理是關鍵操作之一,通過命令cd進入后,使用sudo nano index.nginx-debian.html命令打開并編輯默認的html文件2024-11-11