Nginx 反向代理與緩存功能

Nginx反向代理(動靜分離)

              |---------Nginx+php-fpm(B)
Nginx(A)------|
              |---------Nginx+pho-fpm(C)

1靠粪、網(wǎng)頁代碼全是PMA足丢。
2、Nginx處理靜態(tài)資源非常強大庇配,在A上部署上PMA代碼,用以處理靜態(tài)資源的請求绍些,且將PHP類資源的請求反向代理至B,C上
3捞慌、B,C上同樣部署PMA代碼,反向代理A將動態(tài)資源的請求發(fā)送至B,C處理柬批,并且是基于IP_HASH的方式啸澡。
4、B上部署數(shù)據(jù)庫mariadb氮帐。

實驗配置:

定義后端Server組:源ip_hash方式均衡,權(quán)重為10,超時5s,最大嘗試3次失敗.
upstream pma {
   ip_hash;
   server 192.168.3.6 weight=10 fail_timeout=5s max_fails=3;
   server 192.168.10.27 weight=10 fail_timeout=5s max_fails=3;
}
    location / {
        location ~ \.(php|php5)?$ {
            proxy_pass  http://pma;       //PHP的代碼交給B,C服務(wù)器處理
            proxy_set_header X-RealA-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $Host;
            proxy_redirect     off;
        }
        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
                root /data/webapps/pma;     //靜態(tài)類資源由本地響應(yīng)
                expires      3d;
                add_header Static Nginx-Proxy;
        }
    }

Nginx緩存功能

expires方式:靜態(tài)資源嗅虏,啟用expires方式,其實是服務(wù)器在HTTP相應(yīng)頭部插入cache-control的字段,字段內(nèi)容類似(max-age=259200),由expires設(shè)置的時間換算得到上沐,這樣可以節(jié)約帶寬資源皮服。

cache方式:在本地磁盤創(chuàng)建一個文件目錄,根據(jù)設(shè)置参咙,將請求的資源以K-V形式緩存在此目錄當(dāng)中龄广,KEY需要自己定義,url的hash結(jié)果蕴侧,同時可以根據(jù)需要指定某內(nèi)容的緩存時長择同,比如狀態(tài)碼為200緩存10分鐘,狀態(tài)碼為301净宵,302的緩存5分鐘敲才,其他所有內(nèi)容緩存1分鐘,且當(dāng)后端服務(wù)器響應(yīng)類似error,500,501,502等等狀態(tài)碼時择葡,是否可以利用過期緩存響應(yīng)瀏覽器紧武,等等。

實驗配置:

    proxy_cache_path /data/cache/nginx/ levels=1:2 keys_zone=one:10m inactive=1d;    //inactive表示緩存的時間刁岸,到期之后將會把緩存清理
    location / {
        location ~ \.(php|php5)?$ {
            proxy_cache one;
            proxy_cache_key    $uri$is_args$args;     //以此變量值做HASH脏里,作為KEY
            add_header X-Cache $upstream_cache_status;     //HTTP響應(yīng)首部可以看到X-Cache字段,內(nèi)容可以有HIT,MISS,EXPIRES等等
            proxy_cache_valid 200 10m;
            proxy_cache_valid 301 302 5m;
            proxy_cache_valid any 1m;
            proxy_cache_use_stale error http_500 http_502 http_503 http_504;
            proxy_pass  http://pma;
            proxy_set_header X-RealA-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $Host;
            proxy_redirect     off;
        }
        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
                root /data/webapps/pma;
                expires      3d;
                add_header Static Nginx-Proxy;
        }
    }

建立index.php測試頁面可以看到緩存效果虹曙。

此兩類情況都是由前端反向代理Nginx來提供靜態(tài)資源迫横,所以代碼需要部署在三臺server,也可以將代碼部署在B,C酝碳,而前端A矾踱,開啟緩存,將B,C返回給瀏覽器的靜態(tài)資源緩存在本地疏哗。

    location / {
        location ~ \.(php|php5)?$ {
            proxy_cache one;
            proxy_cache_key    $uri$is_args$args;     //以此變量值做HASH呛讲,作為KEY
            add_header X-Cache $upstream_cache_status;     //HTTP響應(yīng)首部可以看到X-Cache字段,內(nèi)容可以有HIT,MISS,EXPIRES等等
            proxy_cache_valid 200 10m;
            proxy_cache_valid 301 302 5m;
            proxy_cache_valid any 1m;
            proxy_cache_use_stale error http_500 http_502 http_503 http_504;
            proxy_pass  http://pma;
            proxy_set_header X-RealA-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $Host;
            proxy_redirect     off;
        }
        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
        #   root /data/webapps/pma;
            proxy_pass  http://pma;
            proxy_cache one;
            proxy_cache_key    $uri$is_args$args;
            add_header X-Cache $upstream_cache_status;
            proxy_cache_valid 200 10m;
            proxy_cache_valid 301 302 20m;
            proxy_cache_valid any 1m;
            proxy_cache_use_stale error http_500 http_502 http_503 http_504;
            expires      3d;
            add_header Static Nginx-Proxy;
        }
    }

在/data/cache/nginx目錄下有很多以單字符命名的目錄文件,在這些目錄文件下還有以雙字符命名的目錄文件贝搁,最后才是由proxy_cache_key經(jīng)過HASH處理的字符文件名吗氏。

nginx緩存修剪需要在編譯安裝時添加第三方模塊,ngx_cache_purge
下載地址:
https://github.com/FRiCKLE/ngx_cache_purge/

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --add-module=../ngx_cache_purge-2.3
# 配置:
location ~ /purge(/.*) {
            allow 127.0.0.1;
            allow 192.168.0.0/16;
            deny all;
            proxy_cache_purge one $uri;
}

測試訪問:表示對2.png這個圖片資源進行修剪
pmatest.com/purge/2.png

部署pma代碼雷逆,PHP程序代碼里面會有控制緩存機制弦讽,包括cookie
值,需要另外設(shè)置是否針對此類似情況進行緩存膀哲。
這部分就涉及到緩存的優(yōu)先級往产,php程序?qū)彺嬗性O(shè)置緩存時間,nginx代理服務(wù)器可以對緩存設(shè)置緩存時間某宪。

當(dāng)響應(yīng)報文出現(xiàn)Cache_Control:'no-store, no-cache,....'出現(xiàn)類似字段,這類似php程序要求對此類資源不做緩存仿村,此時就算nginx反向代理服務(wù)器設(shè)置緩存過期時間也是沒有效果。
緩存的優(yōu)先級:
inactvie兴喂、源服務(wù)器端Expires蔼囊、源服務(wù)器端max-age、proxy_cache_valid

<<nginx緩存優(yōu)先級>>
http://www.ttlsa.com/nginx/nginx-cache-priority/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞻想,一起剝皮案震驚了整個濱河市压真,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蘑险,老刑警劉巖滴肿,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異佃迄,居然都是意外死亡泼差,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門呵俏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堆缘,“玉大人,你說我怎么就攤上這事普碎『鸱剩” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵麻车,是天一觀的道長缀皱。 經(jīng)常有香客問我,道長动猬,這世上最難降的妖魔是什么啤斗? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮赁咙,結(jié)果婚禮上钮莲,老公的妹妹穿的比我還像新娘免钻。我一直安慰自己,他們只是感情好崔拥,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布极舔。 她就那樣靜靜地躺著,像睡著了一般链瓦。 火紅的嫁衣襯著肌膚如雪姆怪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天澡绩,我揣著相機與錄音,去河邊找鬼俺附。 笑死肥卡,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的事镣。 我是一名探鬼主播步鉴,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼璃哟!你這毒婦竟也來了氛琢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤随闪,失蹤者是張志新(化名)和其女友劉穎阳似,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铐伴,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡撮奏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了当宴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畜吊。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖户矢,靈堂內(nèi)的尸體忽然破棺而出玲献,到底是詐尸還是另有隱情,我是刑警寧澤梯浪,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布捌年,位于F島的核電站,受9級特大地震影響驱证,放射性物質(zhì)發(fā)生泄漏延窜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一抹锄、第九天 我趴在偏房一處隱蔽的房頂上張望逆瑞。 院中可真熱鬧荠藤,春花似錦、人聲如沸获高。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽念秧。三九已至淤井,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摊趾,已是汗流浹背币狠。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留砾层,地道東北人漩绵。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像肛炮,于是被迫代替她去往敵國和親止吐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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

  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成侨糟,其中碍扔,內(nèi)核的設(shè)計非常微小和簡潔,完成的工作也非常簡單...
    rosekissyou閱讀 10,211評論 5 124
  • 上一篇《WEB請求處理一:瀏覽器請求發(fā)起處理》秕重,我們講述了瀏覽器端請求發(fā)起過程不同,通過DNS域名解析服務(wù)器IP,并建...
    七寸知架構(gòu)閱讀 81,002評論 21 356
  • Nginx簡介 解決基于進程模型產(chǎn)生的C10K問題,請求時即使無狀態(tài)連接如web服務(wù)都無法達(dá)到并發(fā)響應(yīng)量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,003評論 0 9
  • 清理無意識獲得無緣由的喜悅 許多家人來做溫雅老師的個案溶耘,經(jīng)常會問套鹅,老師,我為什么沒有無緣由的喜悅汰具,為什么我很恐懼卓鹿,...
    微藍(lán)天空閱讀 295評論 0 1
  • 給別人留下的第一印象極為重要!衣著得體留荔,不僅是對別人的一種尊重吟孙,更會讓自己對自己充滿自信。
    濰坊泰華DDM張娟閱讀 204評論 0 0