一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

nginx的配置、虛擬主機、負載均衡和反向代理(3)(轉)

 JhouShuai 2016-06-04

nginx中的 location 正則模塊

用過apache的知道,apache也是可以配置URL重寫的,我之前一篇中也詳細的寫過:apache的虛擬域名rewrite配置以及.htaccess的使用。

這一小節(jié),主要來學習nginx中的URL重寫怎么做。url重寫模塊,主要是在location模塊面來實現(xiàn),我們一點一點的看。

首先看下location 正則匹配的使用。

還記得之前是如何用location來定位.php文件的嗎?

  1. location ~ \.php$ {
  2. fastcgi_pass 127.0.0.1:9000;
  3. fastcgi_index index.php;
  4. include fastcgi.conf;
  5. }

我們用~來表示location開啟正則匹配, 這樣:location ~。

還可以用這個來匹配靜態(tài)資源,緩存它們,設置過期時間:

  1. location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|mp3|mp4|swf){
  2. expires 15d;
  3. }
  4. location ~ .*\.(css|js){
  5. expires 12h;
  6. }

expires 用來設置HTTP應答中的ExpiresCache-Control的頭標時間,來告訴瀏覽器訪問這個靜態(tài)文件時,不用再去請求服務器,直接從本地緩存讀取就可以了。

  1. 語法: expires [time|epoch|max|off]
  2. 默認值: expires off
  3. 作用域: http, server, location

可以在time值中使用正數(shù)或負數(shù)?!癊xpires”頭標的值將通過當前系統(tǒng)時間加上您設定的 time 值來獲得。

可以設置的參數(shù)如下:

epoch 指定“Expires”的值為 1 January, 1970, 00:00:01 GMT。 
max 指定“Expires”的值為 31 December 2037 23:59:59 GMT,“Cache-Control”的值為10年。 
-1 指定“Expires”的值為 服務器當前時間 -1s,即永遠過期 
負數(shù):Cache-Control: no-cache 
正數(shù)或零:Cache-Control: max-age = #, # 會轉換為指定時間的秒數(shù)。比如:1d、2h、3m。 
off 表示不修改“Expires”和“Cache-Control”的值

比如再看個例子:

控制圖片等過期時間為30天

  1. location~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
  2. expires 30d;
  3. }

我們還可以控制哪一個文件目錄的時間,比如控制匹配/resource/或者/mediatorModule/里所有的文件緩存設置到最長時間。

  1. location ~ /(resource|mediatorModule)/ {
  2. root /opt/demo;
  3. expires max;
  4. }

實戰(zhàn)一下。我們設置下過期時間,然后用chrome看下http頭部情況。

此處輸入圖片的描述
我把這張圖片的expires設置為30天,我們看圖中的cache-controlExpires看到了,有30天的緩存了。說明生效了。我們再看下nginx的訪問日志:

此處輸入圖片的描述

看下code碼,都是304,表示未修改,告訴瀏覽器直接讀本地的。也就是說緩存生效了。

URL重寫模塊(Rewrite)

重寫模塊與很多模塊一起使用。先看一下是怎么用的,看2個例子,然后我們再一點一點講每個的使用方法:

  1. location /download/ {
  2. if ($forbidden) {
  3. return 403;
  4. }
  5. if ($slow) {
  6. limit_rate 10k;
  7. }
  8. rewrite ^/(download/.*)/media/(.*)\..*$ /$1/mp3/$2.mp3 break;
  1. location / {
  2. root html;
  3. index index.html index.htm;
  4. rewrite ^/bbs/(.*)$ http://192.168.18.201/forum/$1;
  5. }

上面2個例子就是利用rewrite來完成URL重寫的。我們慢慢來看它的用法。

break

break 和變成語言中的用法一樣,就是跳出某個邏輯。

語法:break 
默認值:none 
使用字段:server, location, if

  1. if (!-f $request_filename) {
  2. break;
  3. }

上面這個例子就是在if里面使用break,意思是如果訪問的文件名不存在,就跳出。后續(xù)會有更多的例子。

if

語法:if (condition) { … } 
默認值:none 
使用字段:server, location

if 判斷一個條件,如果條件成立,則后面的大括號內的語句將執(zhí)行,相關配置從上級繼承。

可以在判斷語句中指定下列值:

  • 一個變量的名稱;不成立的值為:空字符傳”“或者一些用“0”開始的字符串。
  • 一個使用=或者!=運算符的比較語句。
  • 使用符號~*和~模式匹配的正則表達式:
  • ~為區(qū)分大小寫的匹配。
  • ~*不區(qū)分大小寫的匹配(firefox匹配FireFox)。
  • !~和!~*意為“不匹配的”。
  • 使用-f和!-f檢查一個文件是否存在。
  • 使用-d和!-d檢查一個目錄是否存在。
  • 使用-e和!-e檢查一個文件,目錄或者軟鏈接是否存在。
  • 使用-x和!-x檢查一個文件是否為可執(zhí)行文件。

我們一一來舉例看看。

  1. if ($http_user_agent ~ MSIE) {
  2. rewrite ^(.*)$ /msie/$1 break;
  3. }

$http_user_agent變量獲取瀏覽器的agent,使用~ 來匹配大小寫 
用戶如果使用的IE 瀏覽器,就執(zhí)行if 里面的操作。

  1. if ($request_method = POST ) {
  2. return 405;
  3. }

$request_method變量獲取請求的方法,使用=來判斷是否等于POST 。如果復合,就執(zhí)行if 里面的操作。

  1. if (!-f $request_filename) {
  2. break;
  3. proxy_pass http://127.0.0.1;
  4. }

$request_filename變量獲取請求的文件名,使用!-f來匹配文件,如果不是一個文件名,就執(zhí)行if 里面的邏輯。

return

語法:return code 
默認值:none 
使用字段:server, location, if

這個指令結束執(zhí)行配置語句并為客戶端返回狀態(tài)代碼,可以使用下列的值:204,400,402-406,408,410, 411, 413, 416與500-504。此外,非標準代碼444將關閉連接并且不發(fā)送任何的頭部。

rewrite

語法:rewrite regex replacement flag 
默認值:none 
使用字段:server, location, if

rewrite用來重寫url,有3個位置:

regex 表示用來匹配的正則 
replacement 表示用來替換的 
flag 是尾部的標記:

flag可以是以下的值:

  • last - url重寫后,馬上發(fā)起一個新的請求,再次進入server塊,重試location匹配,超過10次匹配不到報500錯誤,地址欄url不變
  • break - url重寫后,直接使用當前資源,不再執(zhí)行l(wèi)ocation里余下的語句,完成本次請求,地址欄url不變
  • redirect - 返回302臨時重定向,url會跳轉,爬蟲不會更新url。
  • permanent - 返回301永久重定向。url會跳轉。爬蟲會更新url。
  • 為空 - URL 不會變,但是內容已經(jīng)變化,也是永久性的重定向

上面的正則表達式的一部分可以用圓括號,方便之后按照順序用$1-$9來引用。

我們來看幾個例子:

我們需要將/photos/123456重寫成/path/to/photos/12/1234/123456.png

可以這樣:

  1. rewrite "/photos/([0-9] {2})([0-9] {2})([0-9] {2})" /path/to/photos/$1/$1$2/$1$2$3.png;

下面是一些簡單的常見的重寫。

  1. rewrite ^/js/base.core.v3.js /js/base.core.v3.dev.js redirect;
  2. rewrite ^/js/comment.frame.js /js/comment.frame.dev.js redirect;
  3. rewrite ^/live-static/(.*)$ http://live.bilibili.com/public/$1 last;

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产丝袜女优一区二区三区| 日韩av生活片一区二区三区| 国产一级特黄在线观看| 国产毛片不卡视频在线| 国产美女精品午夜福利视频| 最近日韩在线免费黄片| 99久久人妻中文字幕| 成人免费视频免费观看| 国产精品熟女乱色一区二区| 欧美高潮喷吹一区二区| 午夜午夜精品一区二区| 日本加勒比不卡二三四区| 成人国产一区二区三区精品麻豆| 国产精品久久精品国产| 久一视频这里只有精品| 久久永久免费一区二区| 久久中文字人妻熟女小妇| 色综合久久六月婷婷中文字幕| 国产成人精品一区二三区在线观看| 午夜亚洲精品理论片在线观看| 亚洲熟女乱色一区二区三区| 东京热加勒比一区二区三区| 国产亚洲神马午夜福利| 日韩不卡一区二区三区色图| 国产精品不卡免费视频| 久久精品一区二区少妇| 精品熟女少妇一区二区三区| 日韩在线视频精品中文字幕| 亚洲欧美天堂精品在线| 久久国产精品亚州精品毛片| 亚洲欧美国产网爆精品| 欧美国产日本高清在线| 中文字幕乱子论一区二区三区| 日本午夜福利视频免费观看| 中文文精品字幕一区二区| 国产欧美一区二区久久| 亚洲天堂精品一区二区| 国产精品免费福利在线| 日韩精品亚洲精品国产精品| 91人妻人人做人碰人人九色| 男人和女人草逼免费视频|