標籤:圖片 jpg stream 操作 自動 serve 一個 dfs 正則
6.15 if
文法:if (condition) {…}
應用情境:
server段
location段
常見的condition
變數名(變數值為空白串,或者以“0”開始,則為false,其他的均為true)
以變數為運算元構成的比較運算式(可使用=,!=類似的比較操作符進行測試)
Regex的模式比對操作
~:區分大小寫模式比對檢查
~:不區分大小寫模式比對檢查
!~和!~:對上面兩種測試取反
測試指定路徑為檔案的可能性(-f,!-f)
測試指定路徑為目錄的可能性(-d,!-d)
測試檔案的存在性(-e,!-e)
檢查檔案是否有執行許可權(-x,!-x)
6.15.1基於瀏覽器實現分離案例:
//實現Firefox瀏覽器訪問
if ($http_user_agent ~ Firefox) {
rewrite ^(.*)$ /firefox/$1 break;
}
//實現IE瀏覽器訪問
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
//實現Google瀏覽器訪問
if ($http_user_agent ~ Chrome) {
rewrite ^(.*)$ /chrome/$1 break;
}
注意:以下本人實現用Google瀏覽器訪問的,在html裡要建立Chrome目錄,把imgs移動到Chrome目錄下。
6.15.2 防盜鏈案例
location ~* \.(jpg|gif|jpeg|png)$ {valid_referer none clocked www.idfsoft.com; if ($invalid_referer) { rewrite ^/ http://www.idfsoft.com/403.html; } }
叢集:就是多台伺服器做同樣一件事
6.16 反向 Proxy與負載平衡
nginx通常被用作後端伺服器的反向 Proxy,這樣就可以很方便的實現動靜分離以及負載平衡,從而大大提高伺服器的處理能力。
nginx實現動靜分離,其實就是在反向 Proxy的時候,如果是靜態資源,就直接從nginx發布的路徑去讀取,而不需要從後台伺服器擷取了。
但是要注意,這種情況下需要保證後端跟前端的程式保持一致,可以使用Rsync做服務自動同步或者使用NFS,MFS分布式共用儲存。
Http Proxy 模組,功能很多,最常用的是 proxy_pass 和proxy_cache
如果要使用proxy_cache,需要整合第三方的ngx_cache_purge模組,用來清除指定的URL緩衝。這個整合需要在安裝nginx的時候去做,如: ./configure --add-module=../ngx_cache_purge-1.0 ......
nginx通過upstream模組來實現簡單的負載平衡,upstream需要定義在http段內在
在upstream段內,定義一個伺服器列表,預設的方式是輪詢,如果是確定同一個訪問者發出的請求總是由同一個後端伺服器來處理,可以設定ip_hash,如:
upstream web {#ip_hash; #ip_hash 是只能固定一個訪問,不能重新整理訪問server 192.168.209.13 weight=5;server 192.168.209.14 weight=5;}
注意:這個方法本質還是輪詢,而且由於用戶端的ip可能是不斷變化的,比如動態ip,代理,×××等,因此ip_hash並不能完全保證同一個用戶端總是由同一個伺服器來處理。
定義好upstream後,需要在server段內添加如下內容:
server { location / { proxy_pass http://web; }}
訪問效果:
Linux中ngixn配置②