day-45 網(wǎng)站服務(wù)配置過程② location和rewrite

00.課程介紹部分
    1.nginx服務(wù)location  匹配URI
    2.nginx服務(wù)rewrite配置  跳轉(zhuǎn)
        a 可以實現(xiàn)URI信息跳轉(zhuǎn)
        b 可以實現(xiàn)URL信息跳轉(zhuǎn)
        c 可以實現(xiàn)協(xié)議信息跳轉(zhuǎn)
        d 可以實現(xiàn)偽靜態(tài)配置
    3.網(wǎng)站LNMP架構(gòu)
01.課程知識回顧
    1.nginx服務(wù)訪問的流量控制
        a 基于ip地址連接數(shù)進行控制
        在配置文件中添加
            limit_conn_zone $binary_remote_addr zone=xxxx(name):xM(size);
            limit_conn xxxx(name) x(數(shù)量);

        b 基于用戶訪問頻次進行控制
        在配置文件中添加
            limit_req_zone $binary_remote_addr zone=xxxx(name):(xM)size rate=1r/s(請求一秒一個);
            limit_req zone=xxxx(name) burst=10;     
        burst=number:   最大的請求閾值, 超過閾值請求都會進行控制

    2.nginx服務(wù)日志說明
        a 訪問日志
            log_forman  main   "xxxxxxx"  定義日志格式
            access_log   /var/log/nginx/access.log  main; 定義保存路徑
        b 錯誤日志  
            error_log    var/log/nginx/error.log  warn;   定義保存路徑
            記錄日志的級別
            一般配 warn 或 error    
02.nginx程序location配置方法
    作用:匹配指定的URI信息,可以根據(jù)訪問不同的URI信息,做出不同處理方案
    舉例:
    訪問/oldboy目錄時, 禁止10.0.0.0/24 網(wǎng)段訪問
    訪問/oldgirl目錄時,禁止172.16.1.0/24 網(wǎng)段訪問
    訪問站點下面其他目錄,沒有任何限制

    如何匹配URI信息:
    Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
    Default:    —
    Context:    server, location
    =    精確匹配指定URI信息
    ~    模糊匹配指定URI信息(區(qū)分信息大小寫)
    ~*   模糊匹配指定URI信息(不區(qū)分大小寫)
    ^~   進行優(yōu)先匹配/不識別擴展正則信息


    location = / {                 
        [ configuration A ]
    }

    location / {                     ---進行默認匹配
        [ configuration B ]
    }

    location /documents/ {           ---根據(jù)資源目錄信息進行匹配
        [ configuration C ]
    }

    location ^~ /images/ {           ---進行優(yōu)先匹配/images/目錄
        [ configuration D ]
    }

    location ~* \.(gif|jpg|jpeg)$ {  ---模糊匹配
        [ configuration E ]
    }


    實踐配置:
    第一步:編寫配置文件
    [root@web02 conf.d]# cat www.conf 
    server {
      listen        80;
      server_name   www.oldboy.com;
    # www.oldboy.com / --> index.html
      location / {                                     --- 默認匹配
          root  /html/www;
          index index.html; 
      }
    # www.oldboy.com / --> oldboy.html                 --- 精確匹配的location 會最優(yōu)先 01
      location = / { 
          root /html/www;
          index oldboy.html;
      }
    # www.oldboy.com/documents/ --> oldgirl.html       --- 匹配指定目錄,顯示目錄下面的首頁文件信息
      location /documents/ {
          root /html/www;
          index oldgirl.html;
      }
    # www.oldboy.com/images/    --> oldboy.jpg         --- 優(yōu)先匹配 02
      location ^~ /images/ { 
          root /html/www;
          index oldboy.jpg;
      }
    # www.oldboy.com/xxxx.jpg  --> xxx.jpg             ---模糊匹配
      location ~* \.(jpg|png|gif)$ { 
          root /html/www;
      }
    }

    測驗:
    oldboy.jpg  ---> /html/www/oldboy/   www.oldboy.com/meinv01.html 顯示 oldboy.jpg 圖片
    oldgirl.jpg ---> /html/www/oldgirl/  www.oldboy.com/meinv02.html 顯示 oldgirl.jpg 圖片

    編輯配置文件:
    server {
      listen     80;
      server_name    www.oldboy.com;
      root  /html/www;
      location  / {
         return  301 http://www.oldboy.com/oldboy/oldboy.jpg
      }
    }
    
    總結(jié):
    1.配置多個location時,需要有個默認的location
    2.訪問的URI文件信息必須存在        
    3.訪問指定資源不存在,可以利用return功能進行跳轉(zhuǎn)訪問
03.nginx程序rewrite跳轉(zhuǎn)功能
    用戶瀏覽器 屬于域名地址A -- web服務(wù)器 -- 自動處理 --訪問域名地址信息B
    Syntax: rewrite regex replacement [flag];
    Default:    —
    Context:    server, location, if

    regex:       正則匹配的信息(URL/URI)
    replacement: 替換成什么信息/跳轉(zhuǎn)成什么地址信息
    [flag]:      指定進行跳轉(zhuǎn)的方式

    方式一:last      用戶訪問網(wǎng)站,進行跳轉(zhuǎn)之后,會重啟再次發(fā)起訪問
    方式二:break     用戶訪問網(wǎng)站,進行跳轉(zhuǎn)之后,會直接訪問跳轉(zhuǎn)后的資源信息
    實踐說明:
    server {
       listen            80;
       server_name       www.oldboy.com;
       root              /html/www;
     # www.oldboy.com/break/  -- 跳轉(zhuǎn)(break) -- www.oldboy.com/test/  
       location  ~ ^/break/ {
           rewrite  ^/break/  /test/  break;
       }
     # www.oldboy.com/last/   -- 跳轉(zhuǎn)(last) -- www.oldboy.com/test/ 
       location  ~ ^/last/  {
           rewrite  ^/last/  /test/  last;
       }
    }


    方式三:redirect(臨時跳轉(zhuǎn))     將地址url/uri信息進行跳轉(zhuǎn)變化
    方式四:permanent(永久跳轉(zhuǎn))    將地址url/uri信息進行跳轉(zhuǎn)變化

    臨時跳轉(zhuǎn):不會讓瀏覽器記錄跳轉(zhuǎn)信息 (URI信息跳轉(zhuǎn)經(jīng)常用)
    永久跳轉(zhuǎn):讓瀏覽器記錄跳轉(zhuǎn)信息     (URL信息跳轉(zhuǎn)經(jīng)常用)

    server {
       listen            80;
       server_name       www.oldboy.com;
    # www.oldboy.com/xxxx/  -- 跳轉(zhuǎn)(redirect) -- www.oldboy.com/test/  
       location  ~ ^/break/ {
           root              /html/www;
           index             index.html;
           rewrite  ^/break/  /test/  redirect;
       }
    # www.oldboy.com/last/   -- 跳轉(zhuǎn)(permanment) -- www.oldboy.com/test/ 
       location  ~ ^/last/  {
           root              /html/www;
           index             index.html;
           rewrite  ^/last/  /test/  permanent;
       }

       uri地址跳轉(zhuǎn)練習(xí):
    例1: 用戶訪問www.oldboy.com/abc/1.html 實際上真實訪問是/ccc/bbb/2.html
         http://www.oldboy.com/abc/1.html ==> http://www.oldboy.com/ccc/bbb/2.html  A -> B

        第一步:  創(chuàng)建跳轉(zhuǎn)后環(huán)境:
                mkdir /html/www/ccc/bbb -p; echo oldboy >/html/www/ccc/bbb/2.html

        第二步:編寫配置文件
            server {
              listen        80;
              server_name   www.oldboy.com;
              root    /html/www;
              index  index.html;
              location  /abc/ {
                rewrite  /abc/1.html  /ccc/bbb/2.html redirect;
              }
            }


    例2:用戶訪問www.oldboy.com/2014/ccc/bbb/2.html 實際上真實訪問是/2018/ccc/bbb/2.html   AB --> CB  A(.*) -- C(\1)
     #http://www.oldboy.com/2014/ccc/bbb/2.html ==> http://www.oldboy.com/2018/ccc/bbb/2.html


        第一步: 創(chuàng)建站點目錄環(huán)境信息
            跳轉(zhuǎn)后環(huán)境: mkdir /html/www/2018/ccc/bbb/ -p; echo 2018 >/html/www/2018/ccc/bbb/2.html

        第二步:編輯配置文件
            server {
              listen        80;
              server_name   www.oldboy.com;
              root    /html/www;
              index  index.html;
              location  /2014/ {
                rewrite  /2014(.*)  /2018$1 redirect;
              }
            }
04.課程知識總結(jié)
    1.nginx的location指定配置方法
        location匹配URI的方式 /xx/ ~ ~* ^~ =  \.jpg$
    2.nginx的rewrite指定配置方式
        last/break/redirect(臨時跳轉(zhuǎn))/permanent(永久跳轉(zhuǎn))
    3.練習(xí)   URI跳轉(zhuǎn)
作業(yè):
01. 用戶訪問www.oldboy.com/test/oldboy.jpg 目錄下任何內(nèi)容, 實際上真實訪問是http://www.oldboy.com
        www.oldboy.com/test/oldboy.jpg ==> www.oldboy.com/oldboy.jpg
        
        server {
      listen        80;
      server_name   www.oldboy.com;
      root    /html/www;
      index  index.html;
      location  /test/ {
        rewrite  /test/(.*)  /$1 redirect;
      }
    }

02. 用戶訪問course-11-22-33.html實際上真實訪問是/course/11/22/33/course_33.html
        #http://www.oldboy.com/course-11-22-33.html ==> http://www.oldboy.com/course/11/22/33/course_33.html    
        server {
      listen        80;
      server_name   www.oldboy.com;
      root /html/www;
      location  ^~/ {
        rewrite  /course-11-22-33.html /course/11/22/33/course_33.html last;
      }
    }

    rewrite  /(.*)-(.*)-(.*)-(.*)\.(.*) /$1/$2/$3/$4/$1_$4.$5 last;

        
03. 用戶訪問 www.jd.com 跳轉(zhuǎn)成 www.oldboy.com (難點) -- 無限跳轉(zhuǎn)
    方式一:
    # cat bbs.conf  jd.conf 
    server {
      listen   80;
      server_name   bbs.oldboy.com;
      root     /html/bbs;
      index    index.html;
    }
    server {
      listen        80;
      server_name   www.jd.com;
      location / {
      rewrite ^/(.*)$ http://bbs.oldboy.com/$1 permanent;
    }
    }


    方式二:
    server {
       listen            80;
       server_name       www.oldboy.com www.jd.com;
       root              /html/www;
       index             index.html;
       location  / {
          if ($http_host ~* ^www.jd.com$) {
            rewrite ^/(.*) http://www.oldboy.com/$1 permanent;
          }
       }
    }

    curl -v   --顯示詳細訪問過程
    curl -L   --追蹤跳轉(zhuǎn)過程,顯示頁面信息
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伴箩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鄙漏,更是在濱河造成了極大的恐慌嗤谚,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怔蚌,死亡現(xiàn)場離奇詭異巩步,居然都是意外死亡,警方通過查閱死者的電腦和手機桦踊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進店門椅野,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竟闪,你說我怎么就攤上這事⊙” “怎么了?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵理朋,是天一觀的道長絮识。 經(jīng)常有香客問我,道長次舌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任彼念,我火速辦了婚禮,結(jié)果婚禮上浅萧,老公的妹妹穿的比我還像新娘国拇。我一直安慰自己,他們只是感情好惯殊,可當我...
    茶點故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布也殖。 她就那樣靜靜地躺著,像睡著了一般己儒。 火紅的嫁衣襯著肌膚如雪捆毫。 梳的紋絲不亂的頭發(fā)上闪湾,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天绩卤,我揣著相機與錄音,去河邊找鬼何暇。 笑死,一個胖子當著我的面吹牛裆站,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宏胯,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼杭棵!你這毒婦竟也來了了牛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤甫窟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粗井,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體街图,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年耘擂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片醉冤。...
    茶點故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡篙悯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸽照,到底是詐尸還是另有隱情,我是刑警寧澤定血,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布诞外,位于F島的核電站,受9級特大地震影響浅乔,放射性物質(zhì)發(fā)生泄漏铝条。R本人自食惡果不足惜席噩,卻給世界環(huán)境...
    茶點故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望埠忘。 院中可真熱鬧,春花似錦莹妒、人聲如沸绰上。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至百揭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間课锌,已是汗流浹背祈秕。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踢步,地道東北人丑掺。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像兼丰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鳍征,可洞房花燭夜當晚...
    茶點故事閱讀 43,587評論 2 350

推薦閱讀更多精彩內(nèi)容