初識nginx反向代理和緩存機制

實現的需求圖:php

 

 
環境:
nginx緩存和反向代理服務器:192.168.0.224
實際存儲數據機器:192.168.0.37

 

1、實現反向代理html

一、安裝nginx,兩臺服務器都須要安裝nginx

1)安裝依賴包c++

yum -y install gcc make cmake ncurses-devel libxml2-devel libtool-ltdl-devel gcc-c++ autoconf automake bison zlib-devel pcre-devel openssl openssl-devel  

 

2)下載nginxweb

wget http://nginx.org/download/nginx-1.8.0.tar.gz

 

3)解壓編譯算法

tar -zxvf nginx-1.8.0.tar.gz
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx 
make
make install

 

二、修改配置文件vim

這裏只實現他的功能,並無對配置文件作更多的修改
 
1)代理服務器:vim /usr/local/nginx/conf/nginx.conf
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include      mime.types;
    default_type  application/octet-stream;
    sendfile        on;

    keepalive_timeout  65;

    server {
        listen      80;
        server_name  localhost;
        }
              
        location / {
            proxy_pass  http://192.168.0.37/;
        }
 }
 
配置文件分析:
proxy_pass指令:用來設置被代理服務器的地址,能夠是主機名稱,IP地址加端口號等形式

 

2)真實數據服務器:改路徑便可vim /usr/local/nginx/conf/nginx.conf後端

location /{
        root  /data;
        index index.html index.php;
        }

3)建立對應的文件夾
 
在192.168.0.37真實數據機器上:
mkdir /data
echo "I am realy server" >/data/index.html

 

三、兩臺機器上啓動nginx緩存

 /usr/local/nginx/sbin/nginx

 

四、測試安全

這裏輸入訪問地址,能夠看到他去真是的數據機器上取到了數據," location / "表示的是匹配到的任何內容,都去代理服務器上取,若要一部分在代理服務器上,另外一部分在真實機器上取,能夠根據本身的需求修改配置文件
 
 

2、緩存機制

 基於proxy_cache的緩存
 
  1:在反向代理的基礎上,打開緩存機制,這樣能夠加快訪問速度,只是添加幾行配置,能實現緩存這個功能,其餘具體的優化,安全之類的尚未仔細研究,先搭起來理解看怎麼回事再細細研究其餘的

 

worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include      mime.types;
    default_type  application/octet-stream;
    sendfile        on;

    keepalive_timeout  65;

    proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g;
    
    server {
        listen      80;
        server_name  localhost;
        }
              
        location / {
                 proxy_cache cache_one;
                 proxy_cache_valid 200 304 302 24h;
                 proxy_pass  http://192.168.0.37/;
        }
 }

 

2:查看他的進程多了緩存

 

 

3:配置文件主要添加了三行:
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g;
 
proxy_cache_path:表示緩存文件存放的路徑,該路徑是預先就要建立好的
levels=1:2 :   設置在相對於path指定目錄的第幾級hash目錄中緩存數據,levels=1,表示一級hash目錄,levels=1:2,表示兩級hash目錄,目錄的名稱是基於請求URL經過哈希算法獲得的
keys_zone=cache_one:500m : 設置緩存名字
inactive=1d   : 強制更新時間,在指定時間內沒人訪問,就刪除緩存
max_size=30g  : 設置硬盤中緩存數據的大小限制,最大緩存空間
 
proxy_cache cache_one;
表示這個server使用上面設置的那個cache
 
proxy_cache_valid 200 304 302 24h;
針對不一樣的HTTP響應狀態設置不一樣的緩存時間,若是不設置,nginx服務器只爲HTTP狀態代碼爲200,301和302的響應數據作緩存
使用any能夠表示緩存全部該指令中未設置的其餘響應數據,如:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
表示的是對返回狀態爲200,302的響應數據緩存10分鐘,對返回狀態碼爲301的響應數據緩存1小時,非200,302,301返回狀態的響應數據緩存1分鐘

 

4:測試:
 
1)當你第一次訪問目錄時,獲得的結果是,以下:

 

 

2)能夠進入到緩存目錄看一下它的目錄結構: 

目錄的名稱是基於請求URL經過哈希算法獲取到的
/usr/local/nginx/cache /d/91/972fbe600d30f1cc92495981969ff91d

 

查看一下具體的內容:

 

3)而後把真實數據服務器的nginx給停掉,再一次訪問,仍是能夠獲得

 

4)而後把代理服務器的緩存數據給刪除,再一次訪問,獲得結果:說明從緩存沒有找到,而後代理轉發到真是的服務器也沒找到,這就說明了第二次訪問的是緩存數據的內容

 

5)使用tcpdump抓包看看他的走向:
在客戶端192.168.0.222 訪問192.168.0.224,能夠elinks 192.168.0..224
在代理服務器這裏使用tcpdump抓包,能夠看到他確實是從192.168.0.37去取得數據
tcpdump -i eno16777736 host 192.168.0.224 and 192.168.0.37 and tcp port 80

 

第二次再去訪問,仍是監聽這個80端口,能夠發現tcpdump沒有任何數據,說明它直接從緩存裏讀取了,你能夠把緩存刪了,再次在客戶端訪問,能夠看到它又有數據了

 

基於proxy_store的緩存

1:修改反向代理的配置文件

worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include      mime.types;
    default_type  application/octet-stream;
    sendfile        on;

    keepalive_timeout  65;

    server {
        listen      80;
        server_name  localhost;
        }
              
        location / {
              root "/web1";
              proxy_store on;
              proxy_store_access user:rw group:rw all:r;
              proxy_temp_path "/web1";
              if ( !-f $request_filename )        
              {
                proxy_pass   http://192.168.0.37;
              }       
        }
 }
 
經過location的 if 條件判斷驅動nginx代理服務器與後端服務器通訊和web緩存;判斷請求的資源在nginx代理服務器上是否存在,若是不存在就經過後端服務器獲取數據,而後回傳給客戶端,同時使用proxy store進行緩存。
 
用戶一訪問的時候,主目錄爲/web1,若是裏面沒有用戶須要的數據,就去代理取,而後緩存到本身的主目錄,下次再訪問一樣的資源的時候,就能在緩存這裏獲得數據

建立文件夾:

mkdir /web1

 

2:真實數據服務器的配置文件

worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include      mime.types;
    default_type  application/octet-stream;
    sendfile        on;

    keepalive_timeout  65;

    server {
        listen      80;
        server_name  localhost;
        }
            
        root /data;
        
 }

 

3:測試
 
訪問真實機器的數據目錄/data下的/hah/a.html

 

在代理服務器的緩存目錄下能夠看到緩存到的數據和真實數據服務器的目錄結構同樣:(這個與proxy cache不同)

 

把代理緩存的a.html改一下:

 

再次訪問的時候,返回的數據以下,說明它第二次訪問的是緩存

 

proxy store 與proxy cache的區別:proxy store不提供緩存過時更新,內存索引創建等功能,緩存文件一直會保存在本地磁盤中。

 

注:學習《nginx高性能Web服務器詳解》的時候總結

相關文章
相關標籤/搜索