久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

nginx的配置,、虛擬主機(jī)、負(fù)載均衡和反向代理(3)(轉(zhuǎn))

 JhouShuai 2016-06-04

nginx中的 location 正則模塊

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

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

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

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

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

我們用~來(lái)表示location開啟正則匹配, 這樣:location ~,。

還可以用這個(gè)來(lái)匹配靜態(tài)資源,,緩存它們,設(shè)置過(guò)期時(shí)間:

  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 用來(lái)設(shè)置HTTP應(yīng)答中的ExpiresCache-Control的頭標(biāo)時(shí)間,,來(lái)告訴瀏覽器訪問(wèn)這個(gè)靜態(tài)文件時(shí),,不用再去請(qǐng)求服務(wù)器,直接從本地緩存讀取就可以了,。

  1. 語(yǔ)法: expires [time|epoch|max|off]
  2. 默認(rèn)值: expires off
  3. 作用域: http, server, location

可以在time值中使用正數(shù)或負(fù)數(shù),。“Expires”頭標(biāo)的值將通過(guò)當(dāng)前系統(tǒng)時(shí)間加上您設(shè)定的 time 值來(lái)獲得,。

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

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

比如再看個(gè)例子:

控制圖片等過(guò)期時(shí)間為30天

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

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

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

實(shí)戰(zhàn)一下,。我們?cè)O(shè)置下過(guò)期時(shí)間,然后用chrome看下http頭部情況,。

此處輸入圖片的描述
我把這張圖片的expires設(shè)置為30天,,我們看圖中的cache-controlExpires看到了,有30天的緩存了,。說(shuō)明生效了,。我們?cè)倏聪耼ginx的訪問(wèn)日志:

此處輸入圖片的描述

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

URL重寫模塊(Rewrite)

重寫模塊與很多模塊一起使用,。先看一下是怎么用的,看2個(gè)例子,,然后我們?cè)僖稽c(diǎn)一點(diǎn)講每個(gè)的使用方法:

  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個(gè)例子就是利用rewrite來(lái)完成URL重寫的,。我們慢慢來(lái)看它的用法。

break

break 和變成語(yǔ)言中的用法一樣,,就是跳出某個(gè)邏輯,。

語(yǔ)法:break 
默認(rèn)值:none 
使用字段:server, location, if

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

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

if

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

if 判斷一個(gè)條件,如果條件成立,,則后面的大括號(hào)內(nèi)的語(yǔ)句將執(zhí)行,,相關(guān)配置從上級(jí)繼承,。

可以在判斷語(yǔ)句中指定下列值:

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

我們一一來(lái)舉例看看,。

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

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

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

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

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

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

return

語(yǔ)法:return code 
默認(rèn)值:none 
使用字段:server, location, if

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

rewrite

語(yǔ)法:rewrite regex replacement flag 
默認(rèn)值:none 
使用字段:server, location, if

rewrite用來(lái)重寫url,有3個(gè)位置:

regex 表示用來(lái)匹配的正則 
replacement 表示用來(lái)替換的 
flag 是尾部的標(biāo)記:

flag可以是以下的值:

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

上面的正則表達(dá)式的一部分可以用圓括號(hào),方便之后按照順序用$1-$9來(lái)引用,。

我們來(lái)看幾個(gè)例子:

我們需要將/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;

下面是一些簡(jiǎn)單的常見(jiàn)的重寫,。

  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;

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多