Linux中ngixn配置②
語法:if (condition) {…}
應用場景:
server段
location段
常見的condition
變量名(變量值為空串,或者以“0”開始,則為false,其他的均為true)
以變量為操作數構成的比較表達式(可使用=,!=類似的比較操作符進行測試)
正則表達式的模式匹配操作
~:區分大小寫的模式匹配檢查
~:不區分大小寫的模式匹配檢查
!~和!~:對上面兩種測試取反
測試指定路徑為文件的可能性(-f,!-f)
測試指定路徑為目錄的可能性(-d,!-d)
測試文件的存在性(-e,!-e)
檢查文件是否有執行權限(-x,!-x)
6.15.1基於瀏覽器實現分離案例:
//實現火狐瀏覽器訪問
if ($http_user_agent ~ Firefox) {
}
//實現IE瀏覽器訪問
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
//實現谷歌瀏覽器訪問
if ($http_user_agent ~ Chrome) {
rewrite ^(.*)$ /chrome/$1 break;
}
註意:以下本人實現用谷歌瀏覽器訪問的,在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 反向代理與負載均衡
nginx通常被用作後端服務器的反向代理,這樣就可以很方便的實現動靜分離以及負載均衡,從而大大提高服務器的處理能力。
nginx實現動靜分離,其實就是在反向代理的時候,如果是靜態資源,就直接從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 ......
在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配置②